当前位置: 首页 > news >正文

非传统题选讲

来源:CQ 省集。

[IOI2020 Day2] C. Stations

IOI2020 都是些什么人类在出?B. Counting Mushrooms

不过这题看着非常友善。

在幕后有一颗 \(n\) 个节点的树,点序号\(0 \sim n-1\),边序号从 \(0 \sim n-2\)

你需要实现如下两个函数:

int[] label(int n, int k, int[] u, int[] v)

该函数读入 \(n,k\) 及长为 \(n-1\) 的数组 \(u,v\),返回一个长为 \(n\) 的数组,表示:

  • \(n\):节点个数。
  • \(k\):返回值的所有元素最大值的上限。若超过上限,分数为 \(0\)
  • \((u_i,v_i)\) 给出树的每条边,连接序号为 \(u_i\)\(v_i\) 的点。
  • 返回值:对于序号\(i\) 的点,返回值的第 \(i\) 位表示它的编号(自拟),编号必须为非负整数
int find_next_station(int s, int t, int[] c)

该函数读入 \(s,t\) 及长为 \(n-1\) 的数组 \(c\),返回一个整数值:

  • \(s\):出发点编号
  • \(t\):目标点编号
  • \(c\)\(s\) 的所有邻居的编号
  • 返回值:从 \(s\)\(t\) 的路径上,\(s\) 的下一个点的编号
  • 该函数不能获取调用 label 过程中修改的全局或静态变量。

对于一个有 \(r\) 组测试用例的数据点:

  • 交互程序先会调用恰好 \(r\)label,每次传入不同的树。
  • 再对于每个不同的树,进行若干次 find_next_station 的调用,传入的编号等于对应的 label 返回编号

\(2 \le n \le 1000\),若想获得满分,你的编号不能超过 \(1000\)

一棵树上的节点 \(s \to t\) 的路径,判断 \(s\) 的后继节点,需要哪些信息?

不妨钦定根为 \(0\)

  • \(s\)\(t\) 的祖先关系:若 \(s\) 不为 \(t\) 的祖先,则后继节点为 \(\mathrm{fa}_s\)
  • 否则,看 \(t\) 位于哪一棵子树内:若 \(s\) 的子节点 \(x\) 满足 \(t\) 位于 \(x\) 子树内,则后继节点为 \(x\)

容易发现祖先关系与子树关系是等价的,所以都其实是子树关系,而这个是易于使用 dfn 序来判断的。

  • \(\mathrm{dfn}_{\mathrm{fa}_u} < \mathrm{dfn}_u\),且是唯一一个邻居满足这个条件的。同一子树内,dfn 连续,所以可以用 dfn 区间判断祖孙关系。
  • 问题在于并不知晓子树内 dfn 最大的点。

考虑一些等价的,可以使子树内编号连续的标号法。还要同时知道最大、最小标号

题目给出了所有的邻居,这是很好的性质,但刚刚的 dfn 并没有把它利用完全。如果能够通过自己给出最大/最小,用儿子得出最小/最大,就可以同时知道子树对应的标号区间了。

这给了一个思路,交替标号最小最大。子树 \(u\) 要满足 \(u\) 的标号最小,那么就先行标号 \(u\);如果要使 \(u\) 的编号最大,则遍历完子树最后标号 \(u\)

为实现交替标号最大最小,采用黑白染色的方法,黑点先给自己标号,再进入子树给其他节点标号;白点先进入子树标号,最后给自己标号。

最后,设编号为 \(p_i\),对于黑点 \(u\),它的邻居全是白点,其子树编号区间就是 \([p_u,\displaystyle\max _{\mathrm{fa}_v=u}p_v]\),同时要注意 \(p_{\mathrm{fa}_{u}} > p_u\),且是最大的一个;还有特判没有父亲的 \(0\) 节点。

然后就完了哦吼吼。

http://www.jsqmd.com/news/756777/

相关文章:

  • 基于STM32的智能手环实现方案
  • NVIDIA Profile Inspector深度配置指南:解锁显卡隐藏性能的完整方案
  • Sunshine游戏串流终极指南:3步搭建你的个人云游戏主机
  • 郑州物业巡检巡更软件用什么?能防止代签漏检的 - movno1
  • 2026 青岛黄金回收避坑指南:选福正美,不扣点不熔金 - 福正美黄金回收
  • 全网资源一网打尽:res-downloader 跨平台下载工具深度解析
  • CUDA与高性能计算学习路线:从核心概念到GEMM优化实战
  • 天虹提货券怎么回收?附近没有商场怎么办 - 抖抖收
  • 深入理解 EKS 节点自愈架构:NPD + npd-node-replace 的设计与实现
  • 别再问‘我的手机是arm几’了!用adb一条命令快速查清安卓设备CPU架构(附模拟器/多设备场景)
  • D3KeyHelper:5分钟配置你的暗黑3技能连点器,彻底解放双手!
  • 基于遗传算法的阵列天线方向图优化MATLAB实现
  • 河南物业软件怎么选靠谱?本土企业选型核心标准 - movno1
  • 网盘直链下载助手:告别客户端,3分钟掌握浏览器下载网盘的终极方法
  • 告别重复操作:用快马生成高效飞书cli工具,自动化你的团队管理流程
  • CPPM面授课值得去吗? - 众智商学院官方
  • 快速构建quartus ii安装引导器:快马原型设计助力环境搭建效率翻倍
  • 亨得利维修保养服务中心地址电话全攻略:为什么懂表的人只选这6城?400-901-0695正规渠道揭秘 - 时光修表匠
  • 底层模型一变,为什么下游工作流经常会一起抖动
  • 保姆级教程:用CANoe 16 Demo版从零搭建你的第一个汽车ECU仿真项目(附源码)
  • 基于VuePress构建私有化团队Wiki:静态站点生成器的实践指南
  • OpenClaw.NET .NET 原生插件开发完全指南:以 Mempalace 插件为范例
  • ThreeFingerDragOnWindows终极指南:在Windows上实现macOS式三指拖拽的完整教程
  • 2026职场必备:Gemini3.1Pro提效指南
  • 南京黄金上门回收天花板!2026 闭眼选 福正美黄金回收 - 福正美黄金回收
  • 2025届最火的五大AI辅助写作助手实测分析
  • 3分钟掌握WebSite-Downloader:Python网站离线下载终极指南
  • ChatGPT for Bot:构建多平台AI聊天机器人的开源框架部署与实战
  • AI增强安全运维:基于LLM的自动化渗透测试与安全评估实践
  • 2026 柳州黄金回收榜|福正美黄金回收位列榜一 - 福正美黄金回收