BOJ 1717번 집합의 표현 문제
0일땐 합집합을 하고, 1일땐 같은 집합인지 확인하는 문제이다.
union-find 기본 문제였다.
1717.cpp
#include <bits/stdc++.h>
using namespace std;
#define MAXX 1000001
int parent[MAXX], n, m, check, first, second;
void _union(int, int);
int find(int);
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
// 일단 자기 자신으로 초기화
for (int i = 1; i <= n; i++) {
parent[i] = i;
}
while (m--) {
cin >> check >> first >> second;
if (!check) {
_union(first, second);
} else {
if (find(first) == find(second)) {
printf("YES\n");
} else {
printf("NO\n");
}
}
}
}
void _union(int f, int s) {
int firstParent = find(f);
int secondParent = find(s);
if (firstParent != secondParent)
parent[firstParent] = secondParent;
}
int find(int i) {
if (parent[i] == i) {
return i;
} else {
return parent[i] = find(parent[i]);
}
}
'알고리즘 & SQL > 백준(BOJ)' 카테고리의 다른 글
백준 1476번 : 날짜 계산 C++ (0) | 2018.11.25 |
---|---|
백준 9466번 : 텀 프로젝트 C++ (0) | 2018.11.25 |
백준 7569번 : 토마토 C++ (1) | 2018.11.14 |
백준 7576번 : 토마토 C++ (0) | 2018.11.14 |
백준 2667번 : 단지번호붙이기 C++ (0) | 2018.11.14 |