본문 바로가기

Algorithm/BAEKJOON

[BOJ] 1717번 집합의 표현 (C++)

728x90
반응형

https://www.acmicpc.net/problem/1717

 

1717번: 집합의 표현

첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는

www.acmicpc.net

 

#include <iostream>
using namespace std;

int n, m;
int parent[1000001];

int getParent(int x){
	if(parent[x] == x) return x;
	return parent[x] = getParent(parent[x]);
}

void unionParent(int a, int b){
	a = getParent(a);
	b = getParent(b);
	if(a > b) parent[a] = b;
	else parent[b] = a;
}

void findParent(int a, int b){
	a = getParent(a);
	b = getParent(b);
	if(a == b) cout << "YES\n";
	else cout << "NO\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
	cin >> n >> m;
	for(int i = 1; i <= n; i++) 
		parent[i] = i;
	
	for(int i = 0; i < m; i++){
		int o, a, b;
		cin >> o >> a >> b;
		if(!o){
			unionParent(a, b);
		} else{
			findParent(a, b);
		}
	}
	return 0;
}

 

union-find 연습문제

728x90
반응형