void dfs1(int x){
	siz[x]=1;
	int y,inmax=0;
	for(re int i=head[x];i;i=nxt[i]){
		y=to[i];
		if(y==fa[x])continue;
		fa[y]=x;dep[y]=dep[x]+1;
		dfs1(y);
		if(siz[y]>inmax)inmax=siz[y],heavy[x]=y;
		siz[x]+=siz[y];
	}
}
if(siz[y]>inmax)inmax=siz[y],heavy[x]=y;
改为
if(siz[y]>=inmax)inmax=siz[y],heavy[x]=y;
加一个等于号就过了?
我是 mlog3(n) 的双堆算法。
不加,最后一个点不开 O2 T,开了 O2 M。
加上,最后一个点开了 O2 时内存少了一半???