본문 바로가기
알고리즘/BAEKJOON

BOJ 1717 : 집합의 표현

by 피로물든딸기 2021. 6. 10.
반응형

알고리즘 문제 전체 링크

 

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

댓글