给定一棵无根树,假设它有
n
个节点,节点编号从
Input
第一行包含一个正整数
后面
(n−1)
行,每行两个整数表示树的边。
Output
每行一个整数,第 i(i=1,2,...n) 行表示所有节点到第i个点的距离之和。
Solve
见下图,
v
是
用
x
过
用
比较之后发现
fv=fu−cntx+cnty
。这里
cntx
表示
x
遍历的点数,同理有
cntx
就是
v
的子孙数目,而
现在我们由一个节点的
本题数据严格,最后一组数据(截至2016-02-16)是 100000 个点组成的一条链,这样的数据用递归形式写是会爆栈的。手工扩栈其实也不保险。可以用模拟栈非递归的进行计算。
https://code.csdn.net/qq_23020601/acm/blob/master/51NOD/1405.cpp