实现简单,功能强大,居家旅行,必备良品。
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_N = 100;
int par[MAX_N]; //父亲
int ranks[MAX_N]; // 树的高度
//初始化n个元素
void init(int n) {
for (int i = 0; i < n; i++) {
par[i] = i;
ranks[i] = 0;
}
}
//查询树的根
int find(int x) {
if (par[x] == x) {
return x;
}
else return (par[x] = find(par[x])); //优化
}
//合并x和y所属的集合
void unite(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return;
if (ranks[x] < ranks[y]) {
par[x] = y;
}
else {
par[y] = x;
if (ranks[x] == ranks[y]) ranks[x]++;
}
}
//判断x和y是否属于同一个集合
bool same(int x, int y) {
return find(x) == find(y);
}
int main() {
return 0;
}