求树的重心 模板

树的重心:
树的重心也叫树的质心。找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。

void dfs(int u,int pre)
{
    num[u]=1; f[u]=0;
    for(int i=head[u];i;i=e[i].next)
    {
        int v=e[i].to;
        if(v==pre) continue;
        dfs(v,u);
        num[u]+=num[v];
        f[u]=max(f[u],num[v]);
    }
    f[u]=max(f[u],n-num[u]);
}

///最后枚举一遍f[i]找最小,或者直接在dfs里找也行

原文地址:https://www.cnblogs.com/DeepJay/p/12025194.html