Description
给出一个树形图(“tree-shaped” network),有N(1 <= N <= 10,000)个顶点。如果删除树上某一个顶点,整棵树就会分割成若干个部分。显然,每个部分内部仍保持连通性。
现在问:删除哪个点,使得分割开的每个连通子图中点的数量不超过N/2。如果有很多这样的点,就按升序输出。
例如,如图所示的树形图,砍掉顶点3或者顶点8,分割开的各部件。
Input
第1行:1个整数N,表示顶点数。顶点编号1~N
第2..N行:每行2个整数X和Y,表示顶点X与Y之间有一条边
Output
若干行,每行1个整数,表示一个符合条件的顶点的编号。如果没有顶点符合条件,则仅在第1行上输出”NONE”
Sample Input
10
1 2
2 3
3 4
4 5
6 7
7 8
8 9
9 10
3 8
Sample Output
3
8
分析:用dfs前序遍历,然后用F[i]记录以i为父亲节点的子树的节点个数。然后把点删掉后用f[i]进行判断即可。
代码:
type
code=record
y,next:longint;
end;
cons