并查集学习

xiaoxiao2021-02-28  82

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)

转载请注明原文地址: https://www.6miu.com/read-72089.html

最新回复(0)