반응형

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>
#include <map>
using namespace std;

map<int, int> set;
int n, m, a, b, c;

int findParent(int x) {
	auto f = set.find(x);
	if (f != set.end()) return f->second = findParent(f->second);
	else return x;
}

int main() {
	scanf("%d %d", &n, &m);
	while (m-- && scanf("%d %d %d", &a, &b, &c))
		if (a == 0) {
			int ab = findParent(b);
			int ac = findParent(c);
			if(ab != ac) set.insert({ ab, ac });
		}
		else {
			printf("%s\n", findParent(b) == findParent(c) ? "YES" : "NO");
		}
}
반응형

'Algorithm' 카테고리의 다른 글

백준 4195 : 친구 네트워크  (0) 2021.11.14
백준 1976 : 여행 가자  (0) 2021.11.14
프로그래머스 : 호텔 방 배정  (0) 2021.11.14
프로그래머스 : 셔틀버스  (0) 2021.11.14
프로그래머스 : 올바른 괄호  (0) 2021.11.14

+ Recent posts