码迷,mamicode.com
首页 > 其他好文 > 详细

两次bfs求树的直径的正确性

时间:2019-10-05 18:05:52      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:路径   完全   不完全   class   证明   情况   一点   else   端点   

结论:离树上任意点\(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求树的直径的正确性

标签:路径   完全   不完全   class   证明   情况   一点   else   端点   

原文地址:https://www.cnblogs.com/tztqwq/p/11625268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!