并查集负值根表集合大小的写法
这个写法就能高效查集合大小了
const int maxn=1e2+43; int fa[maxn],n; void init(){for(int i=1;i<=n;i++)fa[i]=-1;} int find(int x){ if(fa[x]<0)return x; fa[x]=find(fa[x]); return fa[x]; } void unite(int x,int y){ x=find(x);y=find(y); if(x==y)return; if(fa[x]<fa[y]){ fa[x]+=fa[y]; fa[y]=x; }else{ fa[y]+=fa[x]; fa[x]=y; } }