简单说明:并查集(union-find set),根据字面意思可以理解为在N个元素中,将属于同一组元素所在的集合合并,期间要反复查找一个元素在哪个集合中,即并+查。处理这类问题时便可以用到这种特殊的数据结构,保证了空间时间不会超过限制。
并查集是一种抽象的数据结构,其本身不具有结构,必须借助一定的数据结构才能够实现,一般可以用数据,链表和树来实现,下面呈现的是用数组实现的方法。
在实现过程中,每一个元素需要进行的操作可以分为以下三步:
(1)、MAKE(x):建立一个新的集合,其仅有的成员就是x,也就是初始化的过程;
(2)、UNION(x,y):将包含元素x和元素y的动态集合合并成一个新的集合;
(3)、FIND(x):返回一个指向包含x集合的代表;
code:
1 for(int i=1;i<=n;i++) 2 father[i]=i; //初始化 3 4 int find(int x){ 5 if(father[x]!=x) father[x]=find(father[x]); 6 return father[x]; //压缩路径,减少事件复杂度 7 } //查询 8 9 void union(int x,int y){ 10 x=find(x); 11 y=find(y); 12 father[y]=x; 13 } //合并