#include #include #include using namespace std; const int maxn=10005; int cnt,n,k,ans,head[maxn]; int root,S,size[maxn],f[maxn],d[maxn],dep[maxn]; bool vis[maxn]; struct edge { int to,next,w; }edge[maxn*2]; void add(int u,int v,int w) { edge[++cnt].to=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt; } void getroot(int u,int fa)//获取重心 { size[u]=1; f[u]=0;//删除u后,最大子树的大小 for(int i=head[u];i;i=edge[i].next) { int v=edge[i].to; if(v!=fa&&!vis[v]) { getroot(v,u); size[u]+=size[v]; f[u]=max(f[u],size[v]); } } f[u]=max(f[u],S-size[u]);//S为当前子树总结点数 if(f[u]