樹上亂搞 樹的重心

2022-05-02 05:00:08 字數 488 閱讀 8786

樹的重心:

定義:即對於樹中每乙個節點,計算他所有子樹中節點數最大的點,這個值最小就是就重心。

其實就是說:對於乙個無向圖,任選乙個點,把他搞成乙個樹,子樹裡節點數最大最小,這個點就是重心,因為使以重心為根建立樹更加平衡,

樹的重心的性質: 

1 . 以樹的重心為根時,所有子樹的大小都不超過整棵樹大小的一半。 

因為重心平衡。

2 . 樹中所有點到某個點的距離和中,到重心的距離和是最小的;如果有兩個重心,那麼到它們的距離和一樣。

因為重心使得樹更加平衡。

3 .  把兩棵樹通過一條邊相連得到一棵新的樹,那麼新的樹的重心在連線原來兩棵樹的重心的路徑上。

因為4 .  在一棵樹上新增或刪除乙個葉子,那麼它的重心最多隻移動一條邊的距離。

因為 一棵樹的重心不會離葉節點很近。

如何求樹的重心?

dfs預處理出每個節點的的子樹大小,

列舉每乙個點,取最小值,複雜度  o(n+m)

樹上亂搞 點分治

poj 1741 給出一棵樹,詢問有多少個點路徑 k 考慮點分治 點分治 解決大規模圖上路徑問題。演算法流程 考慮乙個樹上的路徑,只有兩種情況,經過根和不經過根,1 經過根的路徑可以直接判斷 dis u,v d u d v 2 不經過根就找到那個根繼續遍歷分治下去求解。找根的過程 如果鏈狀的樹,會直...

昔我往矣 樹上亂搞 lca,樹鏈剖分

原做法 樹上倍增 lca,可能生成樹的時候複雜度太高,用的是類似並查集的合併方式。oj上的大佬 樹鏈剖分 lca 先補乙個變數vector 跟著別人的程式修改,發現連續re那麼多次,差別竟在 int dfs與void dfs。re可能是子程式用了函式。按照別人的思路改完了。樹鏈剖分。樹鏈剖分是用子樹...

求樹的重心

題目 題意 給定一棵樹,求樹的重心的編號以及重心刪除後得到的最大子樹的節點個數size,如果size相同就選取編號最小的.分析 首先要知道什麼是樹的重心,樹的重心定義為 找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵 樹的重心,刪去重 心後,生成的多棵樹盡可能平衡.實際上樹的重心...