模板
树的重心
//树的重心
void dfs(int x)
{
size[x]=1;/*初始化每一个子树的大小为1*/
int max_part=0;/*记录删去x的情况下,子树的最大值*/
for(int i=last[x];i;i=e[i].nex)
{
int y=e[i].to;
if(size[y]) continue;
dfs(y);
size[x]+=size[y];/*需要保留x的子树的大小*/
max_part=max(max_part,size[y]);/*记录x的子树的最大值*/
}
max_part=max(max_part,n-size[x]);/*对于整个树而言,还有另一部分的子树*/
if(max_part<ans)/*判断x是否为树的重心*/
{
ans=max_part;
pos=x;
}
}
/*树的重心的定义:求出一个点使得该点下的最大子树大小尽可能的小*/