一道树论
题目描述
小W现在有一个点集S和一棵树,树上有n个点和n−1条有边权的无向边。
但是小W很好奇,如果他想要断掉一些边,使得点集S内的点两两不连通,怎么做才能使要断掉的边的边权和最小呢?
他把这个问题丢给了你,想让你来回答,你只用告诉他要断的边的边权和是多少即可。
但他又觉得太简单了,所以他会一个个把1~n这些点以某个顺序插入S中(初始S为空),你要在每次插入后都回答他这个问题。
输入格式
第一行一个数,表示n。
接下来n−1行,第i行三个数xi,yi,zi表示第i条边连接点xi和yi,边权为zi。
再接下来n行,第i行一个数ai,表示第i次要往S中插入点ai。
输出格式
共n行,第i行表示在第i次插入之后的答案。
数据范围与提示
- 对于20%的数据,n≤18;
- 对于40%的数据,n≤103;
- 对于70%的数据,n≤105;
- 对于100%的数据,1≤n≤5×105,1≤zi≤109,保证a为1~n的一个排列。
样例
5
3 1 8
2 3 8
2 4 8
2 5 7
3
4
1
5
2
0
8
16
23
31
说明
- 第一次:S={3},不用断边;
- 第二次:S={3,4},可以断掉边集{3}或{2};
- 第三次:S={3,4,1},可以断掉边集{1,3}或{1,2};
- 第四次:S={3,4,1,5},可以断掉边集{1,3,4}或{1,2,4};
- 第五次:S={3,4,1,5,2},可以断掉边集{1,2,3,4}。
6
1 2 9
3 4 1
1 3 2
6 1 1
5 6 7
3
1
4
6
5
2
0
2
3
4
11
20
见tree3.in
见tree3.ans