树的直径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树的直径相关的知识,希望对你有一定的参考价值。
写在前面
为什么要写篇这个呢?
在某澡堂的NOIProfessional模拟赛中,由于本蒟蒻不知道还有树的直径这种东西太弱了,导致比赛结果很不理想.
因此写篇学习笔记来纪念它.
树的直径
定义
定义很简单:树中的最长路.
(树的重心即为直径的中点,可由此建立较优的树)
性质
- 距某个点最远的叶子节点一定是树的某一条直径的端点
- 树的直径的长度一定会是某个点的最长距离f[i]与次长距离g[i]之和
求法
1. 两次BFS(DFS)
先任选一个起点BFS(DFS)找到最长路的终点,再从终点进行BFS(DFS),第二次BFS(DFS)找到的最长路即为树的直径
2. dp
可根据性质2来求:
显然最长路的两个端点必然是叶子或者根节点.设f(i)表示到i最远的叶子,g(i)表示到i次远的叶子,则有
f(i)=max{f(j)}+1;
g(i)=second{f(j)}+1;
其中j必须是i的儿子,计算顺序是自底向上.
最终答案为
max{f(i)+g(i)}+1
原理与证明
由于求法1比较常用,现仅给出求法1的证明
设起点为u,第一次BFS(DFS)找到的终点v一定是树的直径中的一个端点
证明
若u是直径上的点,则v显然是直径的终点(如果v不是的话,则必定存在另一个点w使得u到w的距离更长,矛盾)
若u不是直径上的点,则u到v必然于树的直径相交(反证),那么交点到v必然就是直径的后半段了
练习
(这些题均为一些dalao博客上讲解的例题,有一定代表性,因此拿来做练习)
Hdu2196:对于树上(双向边)的每一个节点求出与其距离最远的点的距离
Poj1985:树的直径
蓝桥杯-大臣的旅费:树的直径
Toj1056:可行的最长的路的长度
Toj3517:生成树最长的路的长度
以上是关于树的直径的主要内容,如果未能解决你的问题,请参考以下文章