2022寒假翻译09
有一个树,有n个节点和n−1条边,使所有节点连接起来。每个节点i都有一个不同的权重ai。一只猴子正在树上跳。在一次跳跃中,当且仅当av是从节点u到节点v的最短路径上所有节点中最大的节点时,猴子就可以从节点u跳到节点v。一旦不能到达更多的节点,猴子就会停止跳跃。
对于每个整数k∈[1,n],计算如果猴子从节点k开始,它能到达的最大节点数。
输入:
输入的第一行包含一个整数T(1≤T≤10^4),表示测试用例的数量。
每个测试用例的第一行包含一个整数n(1≤n≤10^5),表示节点的数量。
下面n−1行的每一行都包含两个整数u,v(1≤u,v≤n),表示连接节点u和节点v的边,保证输入将形成一棵树。
下一行包含n个不同的整数a1,a2,…,an(1≤ai≤10^9),表示每个节点的权值。
它保证所有测试用例的n和不超过8×10^5。
输出:
对于每个测试用例,输出n行。第k行包含一个整数,表示猴子从节点k开始时的答案。
样例输入:
2
3
1 2
2 3
1 2 3
5
1 2
1 3
2 4
2 5
1 4 2 5 3
样例输出:
3
2
1
4
2
3
1
3
注释:
对于样本的第二种情况,如果猴子从节点1开始,它最多可以到达4个节点,顺序是1→3→2→4。