반응형
https://www.acmicpc.net/problem/1717
유니온 파인드를 이용하여 문제를 풀 수 있다.
각 원소들의 부모를 자기 자신으로 초기화하고 입력을 받으면서 집합을 만든다.
find를 이용하여 같은 집합에 포함되어 있는지 체크하면 된다.
#include <stdio.h>
int N, M;
int parent[1000100];
int find(int x)
{
if (x == parent[x]) return x;
return parent[x] = find(parent[x]); // 경로 압축
}
void makeUnion(int x, int y)
{
x = find(x);
y = find(y);
if (x != y) parent[x] = y;
}
int main(void)
{
scanf("%d %d", &N, &M);
for (int i = 1; i <= N; i++) parent[i] = i;
for (int i = 0; i < M;i++)
{
int tmp, a, b;
scanf("%d %d %d", &tmp, &a, &b);
if (tmp == 0) makeUnion(a, b);
else
{
if (find(a) == find(b)) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
반응형
'알고리즘 > BAEKJOON' 카테고리의 다른 글
BOJ 1016 : 제곱 ㄴㄴ 수 (0) | 2021.06.18 |
---|---|
BOJ 5465 : 곰돌이 (0) | 2021.06.12 |
BOJ 2606 : 바이러스 (유니온 파인드 Union Find) (0) | 2021.06.08 |
BOJ 2805 : 나무 자르기 (0) | 2021.06.05 |
BOJ 14442 : 벽 부수고 이동하기 2 (0) | 2021.06.02 |
댓글