樹的重心入門
阿新 • • 發佈:2020-07-13
- 樹的重心:對於一棵\(n\)個結點的無根樹,找到一個點,使得把樹變成以該點為根的有根樹樹時,最大子樹的結點數最小。刪去重心後,生成的多棵樹儘可能平衡。
- 性質:
- 性質 1:樹中所有點到某個點的距離和中,到重心的距離和是最小的,如果有兩個重心,他們的距離和一樣。
- 性質 2:把兩棵樹通過某一點相連得到一顆新的樹,新的樹的重心必然在連線原來兩棵樹重心的路徑上。
- 性質 3:一棵樹新增或者刪除一個節點,樹的重心最多隻移動一條邊的位置。
- 性質 4:一棵樹最多有兩個重心,且相鄰。
- 模板詳解:核心\(dfs\)程式碼
-
1 ll minl=inf,ans; 2 /* 3 sz陣列表示以當前節點為根,向下的子樹的節點數目
- 入門例題:here
- 題意:求刪除這個點後最大子樹的節點數,以及這個點的編號,如果有多個點滿足,求編號最小的點。
- AC_Code:
-
1 #include <iostream> 2 #include <string.h> 3