树的重心板子
树的重心:删除这样的一个点以及其对应的边,能使得最大连通块节点个数最少
树的重心的性质:
1、树上所有的点到树的重心的距离之和是最短的,如果有多个重心,那么总距离相等。
2、插入或删除一个点,树的重心的位置最多移动一个单位。
3、若添加一条边连接2棵树,那么新树的重心一定在原来两棵树的重心的路径上。
int vis[maxn];
int ans=inf;
vector<int>e[maxn];
int dfs(int u){
vis[u]=1;
int size=0,sum=1;
//size代表u为根的子树节点个数的最大值
//sum代表以u为根的子树节点个数之和
for(int v:e[u]){
if(vis[v])continue;
int s=dfs(v);
size=max(size,s);
sum+=s;
}
ans=min(ans,max(size,n-sum));//最大子树节点数 与 u节点上方节点数比较
return sum;
}

浙公网安备 33010602011771号