求樹的直徑演算法

2022-01-30 12:29:28 字數 819 閱讀 4300

標籤: 圖論——樹的直徑

閱讀體驗:

樹的直徑是樹上的最長路

沒錯,真的這麼簡單......

先隨便找個點i開始\(dfs\),然後找到一條最長路徑(假設終點是\(u\))

然後從u開始再一次\(dfs\),再找到一條最長路徑(假設終點是\(v\)),\((u,v)\)就是樹的直徑了......

ps:樹的直徑可以有多條(想想定義就知道)

假設樹的直徑是\((u,v)\),第一次\(dfs\)找到\((i,j)\)

如果我們\(dfs\)找到了樹的直徑的一端\((u/v)\),那麼第二次就一定可以找到樹的直徑對吧

那麼證明轉化成了第一次\(dfs\)是否找到了樹的直徑的一端\((u/v)\)

ps:建議自己手動畫棵樹來一邊看著證明效果更佳

首先\(i\)肯定可以和最長路上的乙個點\(k\)(從\(i\)到最長路最先遇到的點)連通對吧

我們假設\(u\)是最長路距離\(k\)較遠的乙個末端,那麼從\(i\)找出去的最長路一定會到\(u\)

綜上所述,兩遍\(dfs(bfs)\)可以找到樹的直徑

而樹的直徑在很多圖論題裡面是很有用的,這種方法就保證了我們的時間複雜度o(n)

為我們其他計算提供了更優的複雜度空間。。。

\(yep\)

p2491 [sdoi2011]消防(有難度的啊)(只放了洛谷的位址,各大\(oj\)應該都有)

求樹的直徑

歡迎來踩本人部落格 樹的直徑 就是樹上最長路 方法 求兩邊dfs即可 步驟 1.從任意一點進行dfs,然後找到乙個最長路徑,記錄最遠點u 2.然後從u再進行dfs,找最長路徑,記錄一點v。u,v 就是樹的直徑 第四屆藍橋杯a組 證明 我們可以看出圖中,樹的直徑是 4 2 5 長度為9.我們一開始選定...

求樹的直徑

歡迎來踩本人部落格 樹的直徑 就是樹上最長路 方法 求兩邊dfs即可 步驟 1.從任意一點進行dfs,然後找到乙個最長路徑,記錄最遠點u 2.然後從u再進行dfs,找最長路徑,記錄一點v。u,v 就是樹的直徑 第四屆藍橋杯a組 證明 我們可以看出圖中,樹的直徑是 4 2 5 長度為9.我們一開始選定...

求樹的直徑

由於之前寫了一篇部落格,用到了樹的直徑卻沒有求。在咕咕咕了n多天之後決定寫這篇部落格。樹的直徑就是樹中最長的一條路。求樹的直徑我只會一種方法 據說dalao都會2種 隨便找乙個點跑一遍最短路,找到離他最遠的節點a,然後從a節點繼續跑最短路,再次找到乙個離a最遠的節點b,a和b分別是直徑的兩個端點,他...