#CF2114E. Kirei 突袭庄园
Kirei 突袭庄园
E. Kirei 突袭庄园
每个测试点时间限制: 秒
内存限制: 兆字节
题目描述
某天,Kirei 潜入了 Ainzbern 家族布满陷阱的庄园,却被 Kiritugu 的使魔发现。评估了自己的实力后,Kirei 决定撤退。
庄园可以表示为一棵有 个节点的树,根节点为 。每个节点 上有一个数字 ,表示该节点的危险程度。
为了成功撤退,Kirei 需要计算每个节点的威胁值。一个节点的威胁值定义为:从该节点出发,沿着到根节点的路径(即向上走到节点 )的所有垂直路径中,交替和的最大值。
垂直路径:从节点 出发,沿着父节点方向向上走若干步(可以不走)形成的节点序列。
交替和的定义为:
其中 表示节点 的父节点,依此类推直到根节点(符号交替:第一个节点取正,第二个取负,第三个取正,……)。
示例
在下图所示的树中,节点 的所有垂直路径及其交替和如下:
- :
- :
- :
- :
所以节点 的威胁值为 。
节点中的红色数字表示 。
请帮助 Kirei 计算所有节点的威胁值,让他安全逃离庄园。
输入格式
第一行包含一个整数 ()—— 测试用例的数量。
每个测试用例:
- 第一行包含一个整数 ()—— 树的节点数。
- 第二行包含 个整数 ()—— 节点的危险值。
- 接下来 行,每行包含两个整数 ()—— 树的一条边。
保证所有测试用例的 之和不超过 ,且给定的边构成一棵树。
输出格式
对于每个测试用例,输出 个整数 —— 每个节点的威胁值。
输入样例
2
5
4 5 2 6 7
1 2
3 2
4 3
5 1
6
1000000000 500500500 900900900 9 404 800800800
3 4
5 1
2 5
1 6
6 4
输出样例
4 5 2 9 7
1000000000 1500500096 1701701691 199199209 404 800800800
样例解释
第一个测试用例的树结构与题目描述中的图一致: