(N)个点,形成一个树状结构。有(M)次发放,每次选择两个点(x,y)
对于(x)到(y)的路径上(含(x,y))每个点发一袋(Z)类型的物品。完成
所有发放后,每个点存放最多的是哪种物品。
Input
第一行数字(N),(M)
接下来(N-1)行,每行两个数字(a,b),表示(a)与(b)间有一条边
再接下来(M)行,每行三个数字(x,y,z).如题
Output
输出有(N)行
每i行的数字表示第(i)个点存放最多的物品是哪一种,如果有
多种物品的数量一样,输出编号最小的。如果某个点没有物品
则输出0
Sample Input
20 50
8 6
10 6
18 6
20 10
7 20
2 18
19 8
1 6
14 20
16 10
13 19
3 14
17 18
11 19
4 11
15 14
5 18
9 10
12 15
11 14 87
12 1 87
14 3 84
17 2 36
6 5 93
17 6 87
10 14 93
5 16 78
6 15 93
15 5 16
11 8 50
17 19 50
5 4 87
15 20 78
1 17 50
20 13 87
7 15 22
16 11 94
19 8 87
18 3 93
13 13 87
2 1 87
2 6 22
5 20 84
10 12 93
18 12 87
16 10 93
8 17 93
14 7 36
7 4 22
5 9 87
13 10 16
20 11 50
9 16 84
10 17 16
19 6 87
12 2 36
20 9 94
9 2 84
14 1 94
5 5 94
8 17 16
12 8 36
20 17 78
12 18 50
16 8 94
2 19 36
10 18 36
14 19 50
4 12 50
Sample Output
87
36
84
22
87
87
22
50
84
87
50
36
87
93
36
94
16
87
50
50
(1<=N,M<=100000)
(1<=a,b,x,y<=N)
(1<=z<=1e9)
题意
中文题面,不解释
题解:
先用树上差分的思想,确定哪个点上要加点,哪个点上要减点。然后用线段树合并,边(dfs)边合并更新,然后最后查询每个点对应的根上的值就行了。