Doby's Lab

백준 7511번: 소셜 네트워킹 어플리케이션 (C++) 본문

PS/BOJ

백준 7511번: 소셜 네트워킹 어플리케이션 (C++)

도비(Doby) 2022. 3. 19. 18:54

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

 

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

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

www.acmicpc.net


Solved By: Union-Find

#include <iostream>
#define MAX 1000000
using namespace std;

int T;
int parent[MAX];

int getRoot(int node){
    if(node == parent[node]) return node;
    else return parent[node] = getRoot(parent[node]);
}

void unionNodes(int a, int b){
    int rA = getRoot(a);
    int rB = getRoot(b);
    
    if(rA < rB){
        parent[rA] = rB;
    }
    else{
        parent[rB] = rA;
    }
}

bool find(int a, int b){
    int rA = getRoot(a);
    int rB = getRoot(b);
    
    if(rA == rB) return true;
    else return false;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin >> T;
    for(int t = 1; t <= T; t++){
        int n, k;
        cin >> n;
        cin >> k;
        
        for(int i = 0; i < n; i++){
            parent[i] = i;
        }
        
        for(int i = 0; i < k; i++){
            int a, b; cin >> a >> b;
            unionNodes(a, b);
        }
        
        int m; cin >> m;
        
        cout << "Scenario " << t << ':' << '\n';
        for(int i = 0; i < m; i++){
            int a, b; cin >> a >> b;
            if(find(a, b)) cout << 1 << '\n';
            else cout << 0 << '\n';
        }
        
        cout << '\n';
    }
    
    return 0;
}
728x90

'PS > BOJ' 카테고리의 다른 글

백준 2820번: 자동차 공장 (C++)  (0) 2022.03.19
백준 1976번: 여행 가자 (C++)  (0) 2022.03.19
백준 1766번: 문제집 (C++)  (0) 2022.03.14
백준 1806번: 부분합 (C++)  (0) 2022.03.13
백준 2003번: 수들의 합 2 (C++), 투 포인터  (0) 2022.03.13