算法之并查集
首先解释一下并查集是什么,并查集就是判断两个元素是不是同一个集合里,如果不是同一个集合,就将两个元素合并。
并查集里经常用到的操作有查找和合并。
首先需要初始化
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;//则合并
}