兩次bfs求樹的直徑的正確性

結論:離樹上任意點\(u\)最遠的點必定是這顆樹直徑的一個端點。spa

證實:class

若點\(u\)在樹的直徑上,設它與直徑兩個端點\(x,y\)的距離分別爲\(S1\)\(S2\),若距離其最遠的點\(v\)不是這兩個端點,di

\(dist(u,v) > S1 && dist(u,v) > S2\), 則必有\(S1 + dist(u,v) > S1 + S2 或 S2 + dist(u,v) > S1 + S2\),這與\((x,y)\)是直徑的math

假設相悖。

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)\)不是樹的直徑的結論。

故結論正確。

相關文章
相關標籤/搜索