백준 1717 집합의 표현

aiden·2025년 11월 10일

백준 문제풀이

목록 보기
9/11

문제 링크 : https://www.acmicpc.net/problem/1717
문제 풀이 :

#include <iostream>
using namespace std;


int parent[1000001];

int find(int a) {
	if (parent[a] == a)
		return a;
	else
		return parent[a] = find(parent[a]);
}

void uni(int a, int b) {
	int aRoot = find(a);
	int bRoot = find(b);
	if (aRoot != bRoot) {
		parent[bRoot] = aRoot;
	}
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n, m;
	cin >> n >> m;
	int c, a, b;

	for (int i = 0; i <= n; i++) {
		parent[i] = i;
	}

	while (m--) {
		cin >> c >> a >> b;
		if(c == 0)
			uni(a, b);
		else {
			if (find(a) == find(b))
				cout << "YES\n";
			else
				cout << "NO\n";
		}
	}
	return 0;
}

유니온 파인드라는 자료구조를 처음 접해봐서 좀 헤맸다.
해당 자료구조의 개념만 이해하면 큰 응용 없이 풀 수 있는 문제였다.

profile
All's well that ends well

0개의 댓글