Givennnodes in a graph labeled from1ton. There is no edges in the graph at beginning.
You need to support the following method:
1.connect(a, b), add an edge to connect nodeaand node b. 2.query(a, b)`, check if two nodes are connected
5 // n = 5
query(1, 2) return false
connect(1, 2)
query(1, 3) return false
connect(2, 4)
query(1, 4) return true
union find
public class ConnectingGraph {
/*
* @param n: An integer
int[] parent;
*/
private int[] parent;
public ConnectingGraph(int n) {
parent = new int[n+1];
for (int i = 1; i < n+1; i++) {
parent[i] = -1;
}
}
/*
* @param a: An integer
* @param b: An integer
* @return: nothing
*/
public int find(int x) {
while (parent[x] != -1) {
x = parent[x];
}
return x;
}
public void connect(int a, int b) {
int x = find(a);
int y = find(b);
if (x != y) {
parent[x] = y;
}
}
/*
* @param a: An integer
* @param b: An integer
* @return: A boolean
*/
public boolean query(int a, int b) {
// write your code here
int x = find(a);
int y = find(b);
return x == y;
}
}