package com.interview.books.question300;
/**
* Created_By: stefanie
* Date: 14-12-15
* Time: 上午10:13
*/
public class TQ2_UnionFind {
int[] unions;
int[] sizes;
public TQ2_UnionFind(int N){
unions = new int[N];
sizes = new int[N];
for(int i = 0; i < N; i++){
unions[i] = i;
sizes[i] = 1;
}
}
public int find(int node){
while(unions[node] != node) node = unions[node];
return node;
}
public void union(int node1, int node2){
int parent1 = find(node1);
int parent2 = find(node2);
if(parent1 == parent2) return;
if(sizes[parent1] >= sizes[parent2]){ //to make more balanced tree
unions[parent2] = parent1;
sizes[parent1] += sizes[parent2];
} else {
unions[parent1] = parent2;
sizes[parent2] += sizes[parent1];
}
}
public boolean connected(int node1, int node2){
return find(node1) == find(node2);
}
public static void main(String[] args){
TQ2_UnionFind uf = new TQ2_UnionFind(10);
uf.union(1,4);
uf.union(1,2);
uf.union(5,7);
uf.union(7,9);
uf.union(5,6);
System.out.println(uf.connected(4,2));//true
System.out.println(uf.connected(9,6));//true
System.out.println(uf.connected(9,2));//false
}
}