8000 Create union-find.cpp · qus0in/basic-algo-lecture@d9c2213 · GitHub
[go: up one dir, main page]

Skip to content

Commit d9c2213

Browse files
Create union-find.cpp
1 parent 3e44c83 commit d9c2213

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

Appendix D/union-find.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
vector<int> p(1000001, -1);
2+
3+
int find(int x){
4+
if(p[x] < 0)
5+
return x;
6+
return p[x] = find(p[x]);
7+
}
8+
9+
bool uni(int u, int v){
10+
u = find(u);
11+
v = find(v);
12+
if(u == v)
13+
return false;
14+
if(p[v] < p[u]) // v의 랭크가 더 큰 경우
15+
swap(u, v); // u, v를 swap
16+
// 위의 if문으로 인해 u의 랭크 >= v의 랭크이다
17+
if(p[u] == p[v]) // 랭크가 같은 경우에 대한 처리
18+
p[u]--;
19+
p[v] = u; // v를 u의 자식으로 만든다
20+
return true;
21+
}

0 commit comments

Comments
 (0)
0