[이것이 코딩 테스트다] 팀 결성

고재욱·2021년 10월 15일
0

❓ 문제 ❓
팀 합치기, 같은 팀 여부 확인 연산을 실행해라

💯 문제 풀이 💯
전형적인 union_parent / find_parent 문제!

#include <iostream>
using namespace std;
int ppl[100001];
int find_parent(int a) {
	if (a == ppl[a]) return a;
	else return ppl[a] = find_parent(ppl[a]);
}

void union_team(int a, int b) {
	int a_parent = find_parent(a);
	int b_parent = find_parent(b);
	if (a_parent < b_parent)
		ppl[b_parent] = a_parent;
	else
		ppl[a_parent] = b_parent;
}
int main() {
	int n, m;	
	cin >> n >> m;
	for (int i = 0; i <= n; i++) {
		ppl[i] = i;
	}
	for (int i = 0; i < m; i++) {
		int tmp, a, b;
		cin >> tmp >> a >> b;
		if (tmp == 0) {
			union_team(a, b);
		}
		else if (tmp == 1) {
			int a_parent = find_parent(a);
			int b_parent = find_parent(b);
			if (a_parent == b_parent)
				cout << "YES\n";
			else cout << "NO\n";
		}
	}
}

0개의 댓글