一、何时使用
题目中有元素合并的意义时。
二、做法理解
1、三个动作:“并”(unite),“查”(judge),“集”(find)。
2、理解:相当于很多个指向一个节点的集合。
三、代码实现(框架)
#include<bits/stdc++.h>
using namespace std;
class UFS{
vector<int> parent;
public:
UFS(int size): parent(size+1){
for(int i = 1;i <= size;i++)
{
parent[i] = i;
}
}
};
int find(int x)
{
return parent[x] == x ? x : parent[x] = find(parent[x]);
}
bool judge(int x,int y)
{
return find(x) == find(y);
}
void unite(int x,int y)
{
int rootofx = find(x);
int rootofy = find(y);
parent[rootofy] = rootofx;
}
int main()
{
return 0;
}