<!-- 작성중인 게시글입니다. -->
#include <iostream>
#define MAX 10
int parent[MAX];
int GetParent(int x) {
if (x == parent[x]) return x;
return parent[x] = GetParent(parent[x]);
}
int UnionParent(int a, int b) {
a = GetParent(a);
b = GetParent(b);
if (a < b) parent[b] = a; // 더 작은쪽으로 부모를 설정한다고 가정
else parent[a] = b;
}
bool SameParent(int a, int b) {
a = GetParent(a);
b = GetParent(b);
if (a == b) return 1;
else return 0;
}
int main(void) {
for (int i = 0; i < MAX; i++) parent[i] = i;
UnionParent(1, 2);
UnionParent(2, 3);
UnionParent(3, 4);
UnionParent(5, 6);
UnionParent(6, 7);
UnionParent(7, 8);
for (int i = 0; i < MAX; i++) std::cout << parent[i] << ' ';
std::cout << '\n';
UnionParent(1, 5);
for (int i = 0; i < MAX; i++) std::cout << parent[i] << ' ';
}
관련 문제
https://www.acmicpc.net/problem/1717
'PS' 카테고리의 다른 글
[PS] 비트 마스킹의 응용 - 모든 부분집합, 비트DP (0) | 2024.09.04 |
---|---|
[PS] 최소 신장 트리(MST) 구현(C++) (0) | 2024.08.31 |