#CF2119F. 火山喷发
火山喷发
火山喷发
- 每次测试时间限制为秒
- 每次测试内存限制为兆字节
题目描述
存在一棵无向树,根节点为。
每个顶点都有权重 。
火山根部有时会喷发。
在时刻 ,熔岩淹没了所有距离根节点不超过 的顶点,其中距离是两个顶点之间最短路径中的边数。
在时刻 ,你处于顶点 ,具有生命值 ,最初 。
时间从 开始(包括时间 ),以下事件在每个时间戳按顺序发生:
- 设 为你现在所在的顶点。你的生命值会增加 ,即 。
- 如果 或者顶点 此时被熔岩淹没,你会立刻死亡。
- 你必须移动到相邻的顶点(包括父子;不允许原地停留)。你会在下一个时间戳到达选定的顶点。
找出你死前能做的最大动作数。
输入格式
每个测试包含多个测试用例。
第一行包含测试用例的数量 ()。
接下来是每个测试用例的描述。
对于每个测试用例:
- 第一行包含两个整数 (),表示顶点数和你在时间戳 时起始的顶点。
- 第二行包含 个整数 (,且 ),其中 表示顶点 的权重。
- 接下来 行,每行包含两个整数 (),描述了一条边连接的两个顶点。
保证给定图是一棵树,且所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出一行整数表示你能走的最大步数。
示例输入
6
7 4
-1 -1 -1 1 1 1 -1
2 1
3 2
4 3
5 4
6 5
7 6
8 2
-1 1 1 1 1 -1 1 1
2 1
6 2
8 6
3 8
7 3
5 7
4 5
8 2
-1 1 -1 -1 -1 1 -1 -1
2 1
8 2
4 1
5 4
3 4
7 2
6 8
8 4
1 1 1 1 1 -1 1 -1
8 1
3 1
4 3
5 4
6 4
7 6
2 5
8 4
1 1 1 1 -1 -1 1 1
2 1
5 1
4 5
8 5
3 8
7 2
6 2
18 10
-1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 1 1 -1 1 1 1 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
9 14
14 15
15 16
16 17
17 18
示例输出
6
7
3
3
1
13
注释
第一个测试用例的最优走法序列之一是:
,共 次移动。
生命值 的变化为:。更准确地说:
- 在时刻 ,生命值 变为 ,你从顶点 移动到顶点 。
- 在时刻 ,生命值 变为 ,你从顶点 移动到顶点 。
- 在时刻 ,生命值 变为 ,你从顶点 移动到顶点 。
- 在时刻 ,生命值 变为 ,你从顶点 移动到顶点 。
- 在时刻 ,生命值 变为 ,你从顶点 移动到顶点 。
- 在时刻 ,生命值 变为 。此时顶点 到根节点的距离为 ,表示顶点 尚未被熔岩淹没。你从顶点 移动到顶点 。
- 在时刻 ,生命值 变为 ,但顶点 到根节点的距离为 ,表示顶点 被熔岩淹没。