๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 18116๋ฒˆ - ๋กœ๋ด‡ ์กฐ๋ฆฝ

by ์•ˆ์ฃผํ˜• 2022. 9. 2.

๋ฌธ์ œ

 

18116๋ฒˆ: ๋กœ๋ด‡ ์กฐ๋ฆฝ

์„ฑ๊ทœ๋Š” ๋กœ๋ด‡์„ ์กฐ๋ฆฝํ•ด์•ผ ํ•œ๋‹ค. ์ƒ์ž ์•ˆ์—๋Š” ์—ฌ๋Ÿฌ ๋กœ๋ด‡์˜ ๋ถ€ํ’ˆ๋“ค์ด ์„ž์—ฌ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ค ๋ถ€ํ’ˆ์ด ์–ด๋Š ๋กœ๋ด‡์˜ ๋ถ€ํ’ˆ์ธ์ง€ ํ‘œ์‹œ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. ํ˜ธ์žฌ๋Š” ์ „์ž๊ณผ๋ผ์„œ ๋‘ ๋ถ€ํ’ˆ์„ ๋ณด๋ฉด ๊ฐ™์€ ๋กœ๋ด‡์˜

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
using namespace std;


int N;
int parent[1000001];
int child_cnt[1000001];

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

void union_parent(int a, int b){
    a = find_parent(a);
    b = find_parent(b);
    
    if(a<b){
        parent[b] = a;
        child_cnt[a] += child_cnt[b];
        child_cnt[b] = 0;
    }
    else{
        parent[a] = b;
        child_cnt[b] += child_cnt[a];
        child_cnt[a] = 0;
    }
    
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>N;
    
    for(int i=1; i<1000001; i++){
        parent[i] = i;
        child_cnt[i] = 1;
    }
    
    for(int i=0; i<N; i++){
        char cmd; cin>>cmd;
        if(cmd == 'I'){
            int a, b; cin>>a>>b;
            if(find_parent(a) != find_parent(b)) union_parent(a, b);
        }
        else if(cmd == 'Q'){
            int a; cin>>a;
            cout<< child_cnt[find_parent(a)]<<'\n';
        }
    }
}

 

ํ’€์ด

์–ด๋–ค ๋…ธ๋“œ๊ฐ€ ๋ช‡ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š”์ง€ ์ฐพ๋Š” ๋ฌธ์ œ์ธ ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. 

์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด๋†“๊ณ  ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ํ•ฉ์น  ๋•Œ, ํ•ด๋‹น ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ์•„์ด๋””์–ด๋กœ ํ’€์ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ ๋ถ€๋ถ„์—์„œ  cout<< child_cnt[find_parent(a)]<<'\n'; ๋ฅผ cout<< child_cnd[parent[a]]<<'\n';๋ผ๊ณ  ์ฒ˜์Œ์— ์ž‘์„ฑํ–ˆ๋Š”๋ฐ ํ‹€๋ ธ๋‹ค๊ณ  ์˜ค๋‹ต์ด ๋– ์„œ ์•„์ง๊นŒ์ง€ ์™œ ๊ทธ๋Ÿฐ์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.. ํ˜น์‹œ๋‚˜ ์•„์‹œ๋Š” ๋ถ„ ๊ณ„์‹œ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€