树的重心
#include const int N=1000010; const int inf=0x7f7f7f7f; using namespace std; int f[N],size[N],n,head[N],tot; int rt,sum; struct Edge{int u,v,next;}G[N<<1]; inline void addedge(int u,int v){ G[++tot].u=u;G[tot].v=v; G[tot].next=head[u];head[u]=tot; G[++tot].u=v;G[tot].v=u; G[tot].next=head[v];head[v]=tot; } inline void getrt(int u,int fa){ size[u]=1;f[u]=0; for(int i=head[u];i;i=G[i].next){ int v=G[i].v; if(v==fa)continue; getrt(v,u); size[u]+=size[v]; f[u]=max(f[u],size[v]); } f[u]=max(f[u],sum-size[u]); if(f[u]