樹的直徑與重心學習筆記
阿新 • • 發佈:2022-05-31
此文為完成任務所設,可能不易懂,能看懂就將就著看吧
1.定義
樹的定義:不存在環且聯通的圖。
樹的直徑:樹中的最長鏈
樹的重心:為一個點,以此點為根,最大子樹的大小最小。
2.求法
樹的直徑求法分兩種:兩次 DFS/BFS 與樹形 dp 。
首先講好理解點的樹形 dp 。
其實很簡單,每個節點維護子樹到這個點的最長鏈和次長鏈。
對於一個子樹,能做出貢獻的顯然只有最長鏈。
將由子樹最長鏈得到的鏈與此節點的最長鏈與次長鏈作比較。
若比最長鏈大,則將原最長鏈賦給次長鏈,最長鏈更新。
若比次長鏈大,直接更新次長鏈。
每個節點的最長鏈與次長鏈相加即可。
然後是兩次 DFS/BFS 。
第一遍找到與任意節點最遠的節點,第二遍從找到的節點出發,找到最遠的節點。
兩次的節點即為樹的直徑。
樹的重心:
一次 DFS ,每次記錄下當前子樹的大小,最後一個子樹大小就是總節點數-此子樹大小。
算出最大子樹大小後就嘗試更新答案。注意:可能有一個,也可能有兩個。