6
public boolean possibleBipartition(int n, int[][] dislikes) {8
rival = new int[n + 1];9
parent = new int[n + 1];10
for (int i = 1; i <= n; i++) {14
for (int[] dis : dislikes) {15
int x = dis[0], y = dis[1];16
if (find(x) == find(y)) return false;17
if (rival[x] != 0) union(rival[x], y);19
if (rival[y] != 0) union(rival[y], x);25
public int find(int x) {26
if (parent[x] == x) return x;27
return parent[x] = find(parent[x]);30
public void union(int x, int y) {33
if (x_set == y_set) return;34
if (rank[x_set] < rank[y_set]) parent[x_set] = y_set;35
else if (rank[y_set] < rank[x_set]) parent[y_set] = x_set;37
parent[x_set] = y_set;