两次bfs求树的直径的正确性
Posted tztqwq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两次bfs求树的直径的正确性相关的知识,希望对你有一定的参考价值。
结论:离树上任意点\(u\)最远的点一定是这颗树直径的一个端点。
证明:
若点\(u\)在树的直径上,设它与直径两个端点\(x,y\)的距离分别为\(S1\)、\(S2\),若距离其最远的点\(v\)不是这两个端点,
则\(dist(u,v) > S1 && dist(u,v) > S2\), 则必有\(S1 + dist(u,v) > S1 + S2 或 S2 + dist(u,v) > S1 + S2\),这与\((x,y)\)是直径的
假设相悖。
else
\(u\)不在树的直径上,则其到直径最近的一点\(mid\)的距离为\(dist(u,mid)\),设直径的两端点分别为\(x,y\)。
若距离\(u\)最远的点不是\(x,y\)之一, 设距离\(u\)最远的点为\(v\),
则路径\(u->v\)会出现如下几种情况:
1.完全经过路径\(u->mid\)
2.完全不经过路径\(u->mid\)
3.不完全经过路径\(u->mid\)
这3种情况都能推出\((x,y)\)不是树的直径的结论。
故结论正确。
以上是关于两次bfs求树的直径的正确性的主要内容,如果未能解决你的问题,请参考以下文章
HDU 4612 Warm up(双连通分量缩点+求树的直径)
树的直径| CF#615Div3 F. Three Paths on a Tree