并查集负值根表集合大小的写法

这个写法就能高效查集合大小了

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;
	}
}

posted @ 2018-03-04 15:23  Drenight  阅读(184)  评论(0编辑  收藏  举报