转载
一棵树最多有两个重心
这个代码可直接求得
void getCentroid(int u, int fa) {
siz[u] = 1;
wt[u] = 0;
for (int i = head[u]; ~i; i = nxt[i]) {
int v = to[i];
if (v != fa) {
getCentroid(v, u);
siz[u] += siz[v];
wt[u] = max(wt[u], siz[v]);
}
}
wt[u] = max(wt[u], n - siz[u]);
if(wt[u]<<1<=n){
v.push_back(u); //v里存放了树的重心
}
}