世界真的很大
树上最长的路径==树的直径
树的直径的求法应该都知道了,那对于树上的每个点,求出从他出发最远的路径
这个当然可以每一个点DFS一遍得到,但是不如这个O(n)复杂度的算法来的优秀
看题先:
description:
给出一棵树,求出对于每个点,他到树上理他最远的点的距离
input:
多组数据,到EOF
每组数据第一行一个整数n表示节点数
接下来n-1行每行两个整数v,w表示i+1号点到v有一条边权为w的边
output:
n行,每行一个整数表示答案
树上问题一个很重要的东西就是可以限制上和下的方向
即指定根节点无根树转有根树
那么对于一个点,树上到他的最长距离要么是在他的子树内,要么就是在子树外
记录down为子树内的最大距离,up为子树外的最大距离
down可以通过一次DFS直接求到
考虑up的求法