void solve(int x) { vis[x]=1; calc(x); for(int i=head[x];i;i=edge[i].nxt) { int y=edge[i].to; if(vis[y]) continue; rt=0,sum=sz[y],mn=n;//这里子树不一定大小是sz[y] getrt(y,x); solve(rt); } }
之前getrt()并不是随root搜下去的,这里的y可能是x的父亲,所以sz[y]并不一定是y子树的大小