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