[模板]
求樹的重心
[任務]
求樹的重心
[介面]
vector
way[maxn] 無向圖
int siz 該節點的子節點個數(包括自己)
int mu 該節點的(最大,節點數最多)子樹的節點數
allnode 根節點的子節點個數 = siz(root)
int getroot(int u,int fa) 返回以u為根節點的子樹的重心,fa為u的父節點(防止回去);
void dfsize(int u,int fa) 建立siz陣列和mu陣列(以u為根節點)
void dfsroot(int u,int fa,int allnode,int &root) 通過之前建立的siz陣列和mu陣列得到重心.(allnode = siz[u])
[**]
void dfsize(int u,int fa)
}void dfsroot(int u,int fa,int allnode,int &root)
}int getroot(int u,int fa)
模板 樹的重心
定義 找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹盡可能平衡。首先,利用前向星存邊建立邊表。由於無向,所以要連兩次邊。我們用一次 df s dfs 建立以1為根節點時每個結點所在子樹的結點數。接下來考慮把這個點刪掉的結果,如果乙個非根結點有 p...
樹的重心 模板
刪除重心後,子樹的最大權值最小 dfs遍歷每個點,node的所有子樹除了它的兒子們還有它往父親那個方向的一顆子樹 權值 總權值 所有子樹權值和 1 下面的 權值為邊權 include using namespace std const int maxn 1e5 100,inf 0x3f3f3f3f ...
樹的重心 poj3701 模板題
樹的重心也叫樹的質心。找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹盡可能平衡。思路 dfs深搜 回溯 poj3701 有多個重心 ac include include include include include include includ...