BOJ/분리 집합

[C/C++] 백준 - 7511번 : 소셜 네트워킹 어플리케이션

JWonK 2021. 10. 5. 23:43
728x90
반응형

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

 

7511번: 소셜 네트워킹 어플리케이션

각 테스트 케이스마다 "Scenario i:"를 출력한다. i는 테스트 케이스 번호이며, 1부터 시작한다. 그 다음, 각각의 쌍마다 두 사람을 연결하는 경로가 있으면 1, 없으면 0을 출력한다. 각 테스트 케이스

www.acmicpc.net

분리집합 구현만 해주면 되는 아주 간단한 문제이다.

다른 부분을 고려할 필요없이 분리집합 구현만 해주면 되기 때문에 언급할 것이 없다,,

#include <iostream>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#include <cstring>
#include <sstream>
#include <set>
#include <unordered_set>
#include <map> 
#include <algorithm>
#include <cmath>
#include <ctime>
#define CUNLINK ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define ENDL cout << endl
#define ll long long
#define ull unsigned long long
#define INF 18549876543
#define Mod 1000000009
#define endl '\n'
#define pil pair<int,int>

using namespace std;

int n, m, k;
int parent[1000001];

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

void Union(int a, int b) {
	a = getParent(a);
	b = getParent(b);

	if (a < b) parent[b] = a;
	else parent[a] = b;
}

int isLink(int a, int b) {
	if (getParent(a) == getParent(b)) return 1;
	return 0;
}

int main() {
	CUNLINK;
	int testCase;
	cin >> testCase;
	for(int T = 1;T<=testCase;T++) {
		cin >> n;
		cin >> m;
		for (int i = 0; i < n; i++) parent[i] = i;
		for (int i = 0; i < m; i++) {
			int a, b;
			cin >> a >> b;
			Union(a, b);
		}
		cin >> k;
		cout << "Scenario " << T << ":" << endl;
		for (int i = 0; i < k; i++) {
			int node_1, node_2;
			cin >> node_1 >> node_2;
			cout << isLink(node_1, node_2) << endl;
		}
		ENDL;
	}
	return 0;
}
728x90
반응형

'BOJ > 분리 집합' 카테고리의 다른 글

[C/C++] 백준 - 16562번 : 친구비  (0) 2021.08.24