并查集
本文最后更新于:2024年2月12日 晚上
题目
题目
class UF {
int[] p, r;
int setCount;
public UF(int n) {
this.setCount = n;
this.p = new int[n];
this.r = new int[n];
for (int i = 0; i < n; i++) {
p[i] = i;
r[i] = 1;
}
}
public int find(int x) {
// 路径压缩
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
public boolean merge(int x, int y) {
int xx = find(x), yy = find(y);
if (xx == yy) return false;
if (r[xx] >= r[yy]) {
p[yy] = xx;
r[xx] += (r[xx] - r[yy]);
} else {
r[xx] = yy;
}
setCount--;
return true;
}
}
本文作者: MerickBao
本文链接: https://merickbao.top/post/%E7%AE%97%E6%B3%95/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E5%B9%B6%E6%9F%A5%E9%9B%86.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!