优化后的quick-union算法
package com.cn.alg.a15;
import java.util.Arrays;
/**
* @program: nc_parent
* @description:
* @author: 王睿
* @create: 2022-08-07 20:08
**/
public class QuickUnionUF {
private int[] id;
private int count;
private int[] sz;
public QuickUnionUF(int N){
count = N;
id = new int[N];
for (int i = 0; i < id.length; i++) {
id[i] = i;
}
for (int i : sz) {
sz[i] = 1;
}
}
public void union(int p,int q){
int pRoot = find(p);
int qRoot = find(p);
if (pRoot==qRoot){
return;
}
if (sz[pRoot]<sz[qRoot]){
id[pRoot] = id[qRoot];
sz[qRoot] += pRoot;
}else {
id[qRoot] = id[pRoot];
sz[pRoot] += qRoot;
}
count--;
}
public int find(int p){
while (id[p]!=p){
p=id[p];
}
return p;
}
public boolean connection(int p,int q){
return find(p) == find(q);
}
public int count(){
return count;
}
}