并查集的详细介绍见
https://blog.csdn.net/qq_41593380/article/details/81146850
这个给出并查集关键方法的java版本
int[] parent = new int[N];
//初始化
for(int i=0 ; i<N ; i++){
parent[i] = i;
}
//寻找根节点
public int find(int root){
int son = root;
//向上寻找根
while(root!=parent[root]){
root = parent[root];
}
//路径压缩,将son直接挂到root下面,提升性能
while(son!=root){
int tmp = parent[son];
parent[son] = root;
son = tmp;
}
return root;
}
//将同一类别的东西聚合起来,挂到一个root下
public void union(int a,int b){
int aParent = find(a);
int bParent = find(b);
if(aParent != bParent){
parent[aParent] = bParent;
}
}