算法之并查集基础

算法之并查集

首先解释一下并查集是什么,并查集就是判断两个元素是不是同一个集合里,如果不是同一个集合,就将两个元素合并。

并查集里经常用到的操作有查找和合并。

首先需要初始化

void make_set()
{
for(int i=1;i<=n;i++)
fa[i]=i;
}

查找代码(加上了路径压缩)

int findx(int x)
{
    if(x!=fa[x])fa[x]=findx(fa[x])
        return fa[x];//这里用到了递归
}

合并代码

void unity(int x,int y)
{
int x1=findx(x);//找到与x的祖先
int y1=findx(y);//找到y的祖先
    if(x1!=y1)//如果x的祖先和y的祖先不是同一个人
        fa[x1]=y1;//则合并
}
原文地址:https://www.cnblogs.com/a821403286/p/13620372.html