并查集模板
使用并查集时,首先会存在一组不相交的动态集合 S={S1,S2,⋯,Sk},一般都会使用一个整数表示集合中的一个元素。
每个集合可能包含一个或多个元素,并选出集合中的某个元素作为代表。每个集合中具体包含了哪些元素是不关心的,具体选择哪个元素作为代表一般也是不关心的。我们关心的是,对于给定的元素,可以很快的找到这个元素所在的集合(的代表),以及合并两个元素所在的集合,而且这些操作的时间复杂度都是常数级的。
并查集主要包含三个操作:
1. makeSet
2. unionSet
3. find
int maxn=10010; int f[maxn],rank[maxn]; void makeSet(int n){ for(int i=0;i<=n;i++){ f[i]=i; rank[i]=0; } } int find(int r){ while(f[r]!=r) { f[x]=find(f[x]); } return f[x]; } void unionSet(int x,int y){ x=find(x);y=find(y); if(x==y) return; if(rank[x]>rank[y]){ f[y]=x; } else{ if(rank[x]==rank[y]){ rank[y]++; } f[x]=y; } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步