0.5 初始化
void set()
{
for(i=1;i<=n;i++)
fa[i]=i,size[i]=1;
}
1.路径压缩
int find(int x)
{
if(fa[x]==x) retrurn x;
else return fa[x]=find(x);
}
2.启发式合并
void union(int x,int y)
{
x=find(x),y=find(y);
if(x==y)return;
if(size[x]<size[y]) fa[x]=y,size[y]+=size[x];
else fa[y]=x,size[x]+=size[y];
}
3.时空复杂度
空间O(n)
时间接近O(1)