并查集是一种用来管理元素分组情况的数据结构
作用: 1。查询云元素a和元素b是否属于同一组 2。合并元素a和元素b所在的组。
数组par表示的是父亲的编号,par[x] = x时,x是所在的树的根。
使用rank[MAXN]是使其路径压缩。
int par[MAXN];
int rank[MAXN];
void init(
int n) {
for (
int i =
0; i < n; ++i) {
par[i] = i;
rank[i] =
0;
}
}
int find(
int x) {
if (par[x] == x)
return x;
else
return par[x] = find(par[x]);
}
void unite(
int x,
int y) {
x = find(x) ;
y = find(y) ;
if (x == y)
return ;
if (rank[x] < rank[y])
par[x] = y;
else {
par[y] = x;
if (rank[x] == rank[y]) rank[x]++;
}
}
bool same(
int x,
int y) {
return find(x) == find(y);
}
转载请注明原文地址: https://ju.6miu.com/read-40102.html