#include <bits/stdc++.h>
using namespace std;
//int findfather(int x) //查找根节点
//{
// return fa[x] == x ? x : fa[x] = fi(fa[x]);
//}
//查找根节点的另一种方法
//int findfather(int x)
//{
// while(x != father[x])
// {
// x = father[x];
// }
// return x;
//}
int findfather(int x) //查找效率的优化
{
if(fa[x] == x) return x;
else
{
int f = findfather(fa[x]); //递归寻找fa[x]的根节点f
fa[x] = f; //将根节点赋给fa[x]
return f; //返回根节点
}
}
void Union(int x,int y) //把x,y节点放在同一个集合中
{
int p1 = findfather(x), p2 = findfather(y);
if(p1 == p2) return; //避免出现环的情况
fa[p1] = p2; //不可直接写成fa[x] = y;
}
int check(int x,int y) //判断两点是否在同一个集合中
{
int p1 = findfather(x), p2 = findfather(y);
if(x == y) return 1;
else return 0;
}
int main()
{
for(int i = 0; i < maxn; i++)
{
fa[i] = i; //需要进行初始化
}
return 0;
}
并查集知识点
最新推荐文章于 2021-08-05 10:23:11 发布