并查集-入门
作者:互联网
什么是“并查集”?
首先,并查集是一种(复合)数据结构
- 并:合并
- 查:查找
- 集:以字典为基础的数据结构
实现
class UnionFind {
private:
// 如果节点相互连通,则他们在同一颗树里
unordered_map<int, int> father;
public:
bool is_connected(int x, int y) {
return find(x) == find(y);
}
int find(int x) {
// 如果父节点不为空,就不断迭代
int root = x;
while (father[root]!=-1)
{
root = father[root];
}
// 路径压缩
while (x != root) {
int original_father = father[x];
father[x] = root;
x = original_father;
}
return root;
}
void add(int x) {
if (!father.count(x)) {
// 当父节点为空,则将新节点加入到并查集中
father[x] = -1;
}
}
void merge(int x, int y) {
int root_x = find(x);
int root_y = find(y);
if (root_x != root_y) {
father[root_x] = root_y;
}
}
};
标签:入门,int,void,查集,father,节点,root,find 来源: https://www.cnblogs.com/yaocy/p/16480985.html