Complete the code to initialize the parent array so each element is its own parent.
for (int i = 0; i < n; i++) { parent[i] = [1]; }
Each element starts as its own parent, so parent[i] = i.
Complete the code to find the root parent of element x with path compression.
public int Find(int x) {
if (parent[x] != x) {
parent[x] = [1];
}
return parent[x];
}Path compression sets parent[x] to the root parent found by recursively calling Find.
Fix the error in the Union method to correctly union two sets by rank.
public void Union(int x, int y) {
int rootX = Find(x);
int rootY = Find(y);
if (rootX != rootY) {
if (rank[rootX] < rank[rootY]) {
parent[rootX] = rootY;
} else if (rank[rootX] > rank[rootY]) {
parent[rootY] = [1];
} else {
parent[rootY] = rootX;
rank[rootX]++;
}
}
}When rank[rootX] > rank[rootY], rootY's parent should be rootX.
Fill both blanks to complete the method that checks if two elements are in the same set.
public bool Connected(int x, int y) {
return Find(x) [1] Find(y);
}Two elements are connected if their root parents are equal.
Fill all three blanks to complete the Union method with path compression and rank optimization.
public void Union(int x, int y) {
int rootX = [1];
int rootY = [2];
if (rootX != rootY) {
if (rank[rootX] < rank[rootY]) {
parent[rootX] = [3];
} else if (rank[rootX] > rank[rootY]) {
parent[rootY] = rootX;
} else {
parent[rootY] = rootX;
rank[rootX]++;
}
}
}Use Find(x) and Find(y) to get roots, then assign parent[rootX] = rootY if rank[rootX] < rank[rootY].
