-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDisjointSet.java
More file actions
37 lines (37 loc) · 1 KB
/
Copy pathDisjointSet.java
File metadata and controls
37 lines (37 loc) · 1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class DisjointSet {
ArrayList<Integer> rank;
ArrayList<Integer> parent;
DisjointSet(int n) {
rank = new ArrayList<Integer>();
parent = new ArrayList<Integer>();
for(int i=0;i<n;i++) {
rank.add(0);
parent.add(i);
}
}
public int findUpar(int node) {
if(parent.get(node) == node) {
return node;
}
int ulp = findUpar(parent.get(node));
parent.set(node,ulp);
return parent.get(node);
}
public void unionByRank(int u,int v){
int ul_u = findUpar(u);
int ul_v = findUpar(v);
if(ul_u == ul_v)
return;
if(rank.get(ul_u) < rank.get(ul_v)) {
parent.set(ul_u,ul_v);
}
else if(rank.get(ul_u) > rank.get(ul_v)) {
parent.set(ul_v,ul_u);
}
else {
parent.set(ul_v,ul_u);
int rankU = rank.get(ul_u);
rank.set(ul_u,rankU+1);
}
}
}