并查集是一种树形的数据结构,用于处理一些不相交的集合的合并及查询问题。
集就是让每一个元素构成一个单元素的集合,也就是按照一定的顺序将属于同一组的元素的集合进行合并。
模板代码如下:
int pre[1000]; //并查集数组
int Find(int x)
{
int r = x; //假设根节点是自身,然后通过循环进行查找x的根节点
while(pre[r] != r) //因为根节点的pre值为本身
r =pre[r];
int i=x,j;
while(i != r)
{
j = pre[i] ; //把x的上级结点保存
pre[i] = r; //把x的上级结点改为r
i = j; // 然后对x之前的上级结点也进行相同的修改
}
return r;
}
void join(int x,int y)
{
int fx =Find(x);
int fy = Find(y);
if(fx != fy)
pre[fx] = fy;
}
void init(int n)
{
for(int i=0;i<n;i++)
pre[i] = i;
}
并查集也有递归的实现方式,在这里就不详述了,没什么太大的区别。