求树的直径

版权声明:转就转吧~~记得声明噢~~ https://blog.csdn.net/Soul_97/article/details/82313135

树的直径指的是树的最长简单路,即从一点出发到其他一点使得距离最长

求法:

两遍dfs 

第一遍从任意一点开始,最终可以找到树直径的一个端点

第二遍dfs从找到的端点开始 最终可以找到另一个端点

原理:

设起点为u,第一次dfs找到的终点v一定是树的直径的一个端点
证明:

1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w使得u到w的距离更长,则于dfs找到了v矛盾)
2) 如果u不是直径上的点,则u到v必然于树的直径相交(反证),那么交点到v 必然就是直径的后半段了
所以v一定是直径的一个端点,所以从v进行dfs得到的一定是直径长度

练习题:

https://www.nowcoder.com/acm/contest/181/D

猜你喜欢

转载自blog.csdn.net/Soul_97/article/details/82313135
今日推荐