CF2006B.Iris and the Tree
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一棵以 1 号结点为根的有根树。对于树中任意结点 i(1<i≤n),存在一条连接结点 i 和 pi(1≤pi<i)的边,边权为 ti。
Iris 并不知道所有 ti 的具体值,但她知道 i=2∑nti=w,且每个 ti 都是非负整数。
树的结点编号有特殊要求:每个子树中的结点编号是连续的整数。换句话说,树的结点编号是按照深度优先遍历的顺序排列的。

上图中的树满足条件。例如,结点 2 的子树中,结点编号为 2,3,4,5,是连续的整数。

上图中的树不满足条件,因为结点 2 的子树中,结点编号 2 和 4 不是连续的整数。
我们定义 dist(u,v) 为树中结点 u 和 v 之间的简单路径长度。
接下来有 n−1 个事件:
- Iris 得到两个整数 x 和 y,表示 tx=y。
每次事件后,Iris 想要分别独立地计算每个 i(1≤i≤n)时 dist(i,imodn+1) 的最大可能值。她只需要知道这 n 个值的和。请你帮助 Iris 快速得到答案。
注意,在分别计算 dist(i,imodn+1) 和 dist(j,jmodn+1)(i=j)的最大可能值时,未知的边权可以不同。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 t(1≤t≤104),表示测试数据组数。每组测试数据描述如下:
每组测试数据的第一行包含两个整数 n 和 w(2≤n≤2⋅105,0≤w≤1012),表示树的结点数和边权和。
第二行包含 n−1 个整数 p2,p3,…,pn(1≤pi<i),表示树的边的描述。
接下来有 n−1 行,每行两个整数 x 和 y(2≤x≤n,0≤y≤w),表示 tx=y。
保证所有事件中的 x 互不相同,且所有 y 的和等于 w。
保证所有测试数据中 n 的总和不超过 2⋅105。
输出格式
对于每组测试数据,输出一行包含 n−1 个整数,分别表示每次事件后的答案。
输入输出样例
输入#1
4 2 1000000000000 1 2 1000000000000 4 9 1 1 1 2 2 4 4 3 3 6 100 1 2 3 2 1 6 17 3 32 2 4 4 26 5 21 10 511 1 2 2 4 2 1 1 8 8 3 2 6 16 10 256 9 128 2 1 5 8 8 64 4 4 7 32
输出#1
2000000000000 25 18 18 449 302 247 200 200 4585 4473 2681 1567 1454 1322 1094 1022 1022
说明/提示
在第一个测试点中,dist(1,2)=dist(2,1)=t2=w=1012,所以 dist(1,2)+dist(2,1)=2⋅1012。
在第二个测试点中,Iris 得知所有 tx 后的树如下图:

dist(1,2)=t2,dist(2,3)=t2+t3,dist(3,4)=t3+t4,dist(4,1)=t4。第一次事件后,t2=2,所以 dist(1,2)=2。同时:
- 若 t3=7,t4=0,则 dist(2,3) 最大为 9。
- 若 t3=0,t4=7,则 dist(3,4) 和 dist(4,1) 最大为 7。
因此,答案为 2+9+7+7=25。
第二次事件后,t4=4,则 t3=w−t2−t4=4。dist(1,2)=2,dist(2,3)=2+3=5,dist(3,4)=3+4=7,dist(4,1)=4。因此,答案为 2+5+7+4=18。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?