并查集学习

来源:互联网 发布:ge矩阵 编辑:程序博客网 时间:2024/06/05 19:16

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)

原创粉丝点击