#P12652. [KOI 2024 Round 2] 拔树游戏
[KOI 2024 Round 2] 拔树游戏
题目背景
试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。
按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。
题目描述
有一棵由编号为 到 的 个节点构成的有根树。该树的根节点为 号节点,并且第 号节点的父节点是第 号节点()。此外,每个节点都有一个互不相同的整数权值,第 号节点的权值为 ()。
不含子节点的节点称为叶子节点。
我们从根节点(即 号节点)出发,每次移动到当前节点的子节点中权值最小的一个。如此重复,直到到达某个叶子节点。这样得到的从 号节点出发、以某个叶子节点结束的路径,记作 ,我们称其为特殊路径。
定义拔除操作如下:
- 设当前树的特殊路径为 。
- 将 与 的权值交换。
- 将 与 的权值交换。
- 依此类推……
- 将 与 的权值交换。
- 从树中移除连接 与其父节点之间的边。
换句话说,拔除操作会将特殊路径上的节点的权值依次向后传递,并将该路径最后一个叶子节点从树中删除。
例如,考虑下图中的树(图中圆圈外的数字表示节点编号,圆圈内的数字表示该节点的权值):
在第一棵树中,特殊路径为 :从根节点 出发,子节点中权值最小的是 号节点,再从 出发,选择子节点中权值最小的 , 是叶子节点,结束路径。
进行拔除操作后,依次交换权值 ,,并删除 与 之间的边,得到第二棵树。
在第二棵树中,特殊路径为 : 的子节点中权值最小的是 , 是叶子节点。进行拔除操作,交换 ,删除 与 的边,得到第三棵树。
在第三棵树中,特殊路径为 。拔除操作为交换 ,,然后删除 与 之间的边,得到第四棵树。
在第四棵树中,特殊路径为 。执行拔除操作后交换 ,再删除 与 的边,得到第五棵树。
在第五棵树中,特殊路径仅为 。执行拔除操作后,直接删除根节点 。
我们将对给定的树重复执行 次拔除操作。请你编写一个程序,在每次拔除操作执行之前,输出当前 号节点的权值。
输入格式
第一行输入一个整数 ,表示节点个数。
第二行输入 个整数 ,表示每个节点的父节点编号,数字之间以空格分隔。
第三行输入 个整数 ,表示每个节点的初始权值,数字之间以空格分隔。
输出格式
输出共 行,每行一个整数,第 行表示执行第 次拔除操作之前, 号节点的权值。
5
1 1 3 3
5 2 1 3 4
5
1
2
3
4
提示
约束条件
- 所有给定数值均为整数。
- 所有 两两不同。
子任务
- (6 分)
- (10 分)对所有 ,有
- (11 分)对所有 ,有
- (23 分)度数大于等于 的节点个数不超过
- (50 分)无额外限制
翻译由 ChatGPT-4o 完成