定義:對於乙個點,將這個點刪去後,剩下的圖上最大的強連通分量大小不大於原圖總點數的一半
一顆樹上有1到2個重心。
讓我們隨便建一棵樹,樹的重心就是3或5
那麼樹的重心怎麼求呢
在這裡先介紹dfs版
按照定義,我們可以用遞迴求出乙個點的所有子樹大小
當然要判斷原樹減去這個點及其子樹後的樹(即「上方子樹」)也就是總大小-以該點為根的樹大小
void sett(int s,int(可簡單了)fa) f[s]=max(f[s],steps-size[s]);steps為樹的大小
if(f[s]s;//如果要求所有重心的話應把條件改為(f[s]*2<=steps)滿足即為重心
}
求樹的重心
題目 題意 給定一棵樹,求樹的重心的編號以及重心刪除後得到的最大子樹的節點個數size,如果size相同就選取編號最小的.分析 首先要知道什麼是樹的重心,樹的重心定義為 找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵 樹的重心,刪去重 心後,生成的多棵樹盡可能平衡.實際上樹的重心...
專題 樹的重心
定義1 找到乙個點,刪除它得到的森林中最大的子樹節點數最少,那麼這個點就是這棵樹的重心。定義2 刪除重心後得到的所有子樹,其頂點樹必然不超過n 2 性質1 樹中所有點到某個點的距離和中,到重心的距離和是最小的 如果有兩個重心,那麼他們的距離和一樣。性質2 把兩個樹通過一條邊相連得到乙個新的樹,那麼新...
模板 樹的重心
模板 求樹的重心 任務 求樹的重心 介面 vector way maxn 無向圖 int siz 該節點的子節點個數 包括自己 int mu 該節點的 最大,節點數最多 子樹的節點數 allnode 根節點的子節點個數 siz root int getroot int u,int fa 返回以u為根...