void dfs1(int x){
siz[x]=1;//fa[x]=fa_;dep[x]=dep_;
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 时内存少了一半???