public class DisjointSetLianTongZitu {
static int VERTICES=6;
public static void init(int[] parent,int[]rank) {
for(int i=0;i<VERTICES;i++) {
parent[i]=-1;
rank[i]=-1;
}
}
public static int findroot(int x,int[] parent) {
int xroot=x;
while (parent[xroot]!=-1) {
xroot=parent[xroot];
}
return xroot;
}
public static void unionV(int x,int y,int[] parent,int[] rank) {
int xroot=findroot(x, parent);
int yroot=findroot(y, parent);
if(xroot==yroot) {
}
else {
if(rank[xroot]>rank[yroot]) {
parent[yroot]=xroot;
}
else if (rank[xroot]<rank[yroot]) {
parent[xroot]=yroot;
}
else {
parent[yroot]=xroot;
rank[xroot]+=1;
}
}
}
public static void main(String[] args) {
int[][] edges = {{0,1},{1,2},{1,3},{4,5},{2,2},{5,5}};
int [] parent = new int[VERTICES];
int [] rank = new int[VERTICES];
init(parent,rank);
for(int i=0;i<edges.length;i++) {
int x=edges[i][0];
int y=edges[i][1];
unionV(x,y,parent,rank);
}
int sum=0;
for(int i=0;i<edges.length;i++) {
if(parent[i]==(-1)) sum++;
}
System.err.println(sum);
}
}