이건 솔직히 너무 쉬워서 뭐 설명할 게 없음
class DisjointSet {
std::vector<int> parent;
public:
explicit DisjointSet(int n);
int get_parent(int idx);
bool join(int i, int j);
bool _joined_(int i, int j);
};
DisjointSet::DisjointSet(int n) : parent(n) {
for (int i = 0; i < n; ++i) {
parent[i] = i;
}
}
int DisjointSet::get_parent(int idx) {
if (idx == parent[idx]) {
return idx;
} return parent[idx] = get_parent(parent[idx]);
}
bool DisjointSet::join(int i, int j) {
int pi = get_parent(i), pj = get_parent(j);
if (pi == pj) {
return false;
} else {
parent[pj] = pi;
return true;
}
}
bool DisjointSet::_joined_(int i, int j) {
int pi = get_parent(i), pj = get_parent(j);
return pi == pj;
}
'Computer Science' 카테고리의 다른 글
[C++] 표준 라이브러리 클래스 상속받기 (feat. Maybe 모나드 구현) (0) | 2022.09.27 |
---|---|
[C++] class Matrix 구현 (0) | 2022.09.24 |
[C++] Segment Tree 라이브러리 만들기 (0) | 2022.08.16 |
유용한 비트 연산들 (0) | 2022.08.11 |
[C++] 볼록 껍질 클래스 구현 (0) | 2022.08.07 |
댓글