3745: 斯坦纳树(第三轮03)

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:2 解决:1

题目描述

斯坦纳树是这么一类问题:给定一张图G =< V, E >,和点集V1,你需要找到原图 的一张子图(即原图中删去一些点和边之后得到的图),令子图为G′ =< V′, E′ >, 满足V1  ⊆ V′  ,子图G′连通,且子图中的边权和尽量小。

今天, 牛牛接到了这么一个问题: 给定一棵树G (注意到树也是一种特殊的图, 对应上文的图G),每次给出一个点集V1,求这个点集在树G上的斯坦纳树大小(即  边权和)。

他不会做这个问题,所以提出了一个乱搞的做法:建立一个新的完全图G′,图中 每个点都对应着询问点集V1 中的一个点,两个点之间的边权为其在V1 对应的点的 树上距离。最后将这个完全图的最小生成树大小作为答案。

显然这个做法不是正确的,但是牛牛想知道,这个做法在什么情况下是正确的呢? 于是他给出了一个1到n 的排列p ,希望你对每个i(1 ≤ i ≤ n),验证这个算法在点集  Vi    = {p1  , p2  . . . pi }上的正确性。

输入

第一行一个正整数n,表示树的大小。

接下来n − 1行,每行三个数字u, v, w,表示树上的一条边(u, v),边权为w 。 接下来一行n个正整数,表示排列p。

保证给出的树和排列是合法的。


输出

一行一个长度为n 的0101串,若第i个为0,则表示算法在点集V  =  {P1, P2, . . . Pi } 上是错误的。否则则表示算法在该点集上是正确的。

样例输入 复制

5
1 2 3
1 5 0
2 3 2
2 4 3
1 3 4 2 5

样例输出 复制

11011

提示

【样例 1 输入】

5

1 2 3

1 5 0

2 3 2

2 4 3

1 3 4 2 5

【样例 1 输出】

11011

【样例 2 输入】

10

5 9 0

6 9 6

7 6 9

1 7 5

10 1 2

8 10 0

4 10 5

3 4 9

2 5 4

4 5 3 7 8 9 6 2 1 10

【样例 2 输出】

1111111111

【数据范围】

对于20%的数据,2 ≤ n ≤ 10   

对于30%的数据,2 ≤ n ≤ 100

对于另外5%的数据,原树是一条链

对于另外25%的数据, 1 ≤ E ≤ 10^9 ,其中E代表每条边的边权 对于100%的数据,2 ≤ n ≤ 3 × 10^5, 0 ≤ E ≤ 10^9


来源/分类