树的直径

树的直径

定义

树中所有最短路径距离的最大值是树的直径。

求法 1:两次搜索

此方法适用于求 边权均非负 的树的直径。

首先对任意一个结点做 DFS 求出最远的结点,然后以这个结点为根结点再做 DFS 到达另一个最远结点。第一次 DFS 到达的结点可以证明一定是这个图的直径的一端,第二次 DFS 就会达到另一端。下面来证明这个定理。(参考资料

但是在证明定义之前,先证明一个引理:

引理:在一个连通无向无环图中,$x$、$y$ 和 $z$ 是三个不同的结点。当 $x$ 到 $y$ 的最短路与 $y$ 到 $z$ 的最短路不重合时,$x$ 到 $z$ 的最短路就是这两条最短路的拼接。

证明:假设 $x$ 到 $z$ 有一条不经过 $y$ 的更短路 $\delta(x,z)$,则该路与 $\delta(x,y)$、$\delta(y,z)$ 形成一个环,与前提矛盾。

定理:在一个连通无向无环图中,以任意结点出发所能到达的最远结点,一定是该图直径的端点之一。

证明:假设这条直径是 $\delta(s,t)$。分两种情况:

因此定理成立。

求法 2:树形 DP

我们记录当 $1$ 为树的根时,每个节点 $u$ 作为子树的根向下所能延伸的最远距离 $f_{u,0}$ 和次远距离 $f_{u,1}$,那么直径就是所有 $f_{u,0}+f_{u,1}$ 的最大值。

例题

名称 编号 备注 题解
直径的中点