๐Ÿ“ฆ Chango/๐Ÿฃ EDOC

[BOJ][C++] ๋ฐฑ์ค€ 1717๋ฒˆ : ์ง‘ํ•ฉ์˜ ํ‘œํ˜„

์„ ๋‹ฌ 2021. 11. 24. 18:24
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ

์ดˆ๊ธฐ์— {0}, {1}, {2}, ... {n} ์ด ๊ฐ๊ฐ n+1๊ฐœ์˜ ์ง‘ํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์— ํ•ฉ์ง‘ํ•ฉ ์—ฐ์‚ฐ๊ณผ, ๋‘ ์›์†Œ๊ฐ€ ๊ฐ™์€ ์ง‘ํ•ฉ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. m์€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜์ด๋‹ค. ๋‹ค์Œ m๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ๊ฐ์˜ ์—ฐ์‚ฐ์ด ์ฃผ์–ด์ง„๋‹ค. ํ•ฉ์ง‘ํ•ฉ์€ 0 a b์˜ ํ˜•ํƒœ๋กœ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” a๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ง‘ํ•ฉ๊ณผ, b๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ง‘ํ•ฉ์„ ํ•ฉ์นœ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋‘ ์›์†Œ๊ฐ€ ๊ฐ™์€ ์ง‘ํ•ฉ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์€ 1 a b์˜ ํ˜•ํƒœ๋กœ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” a์™€ b๊ฐ€ ๊ฐ™์€ ์ง‘ํ•ฉ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค. a์™€ b๋Š” n ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋ฉฐ ๊ฐ™์„ ์ˆ˜๋„ ์žˆ๋‹ค.

์ถœ๋ ฅ

1๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ YES/NO๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. (yes/no ๋ฅผ ์ถœ๋ ฅํ•ด๋„ ๋œ๋‹ค)

 

์‹œํ–‰์ฐฉ์˜ค

1. ๋ถ„๋ฆฌ์ง‘ํ•ฉ ๊ฐœ๋…์„ ๊ฐ„๋‹จํžˆ ์ดํ•ดํ•˜๊ณ  ์›ƒ์œผ๋ฉฐ ๊ตฌํ˜„ํ–ˆ๋‹ค -> ์‹œ๊ฐ„์ดˆ๊ณผ

 return root(par[i]);
 
//โฌ‡๏ธ

 return par[i] = root(par[i]);

 ๋ชจ๋“  ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”ํ–ˆ๋‹ค.

์ฆ‰, ๋ฃจํŠธ๋ฅผ ์ฐพ์œผ๋Ÿฌ ๊ฐ€๋Š” ์žฌ๊ท€ํ•จ์ˆ˜์˜ ์—ฐ์‚ฐ ๊ณผ์ •์—์„œ ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ๋กœ ์žก์„ ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟˆ

 

2. ๊ทผ๋ฐ ๋˜ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค

    cin.tie(0);
    cin.sync_with_stdio(false);
    ios_base::sync_with_stdio(false);

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์บ ํ”„ ์ฒซ์งธ๋‚  ๋“ฃ๊ณ  ๊ทธ๋™์•ˆ ์žŠ๊ณ ์žˆ์—ˆ๋˜ ์ด ์ฝ”๋“œ... ๋ฅผ ์ถ”๊ฐ€ํ•˜๋‹ˆ ๋˜์—ˆ๋‹ค..

์ € ์˜๋ฏธ๋ฅผ ์•Œ๊ณ ์‹ถ์ง€๋„ ์•Š์•„ ์žŠ๊ณ ์žˆ์—ˆ๋˜ ์ฝ”๋“œ์˜ ์†Œ์ค‘ํ•จ์„ ๊นจ๋‹ฌ์•˜๋‹ค

 

ํ’€์ด

๋ถ„๋ฆฌ์ง‘ํ•ฉ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋ผ์„œ ๊ด€๋ จ ๊ฐœ๋…๋งŒ ๊ณต๋ถ€ํ•˜๊ณ ๋„ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค

๋ฌผ๋ก  ๋‚˜๋Š” ์ธํ„ฐ๋„ท์˜ ํž˜์„ ๋นŒ๋ฆฌ๊ธด ํ–ˆ์ง€๋งŒ ์ด๊ฒŒ ์™œ ๊ณจ๋“œ์ธ๊ฑด์ง€.. ์˜๋ฌธ.....

 

#include <iostream>

using namespace std;

int par[1000001];

//๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
int root(int i){
    if(par[i] == i)
        return i;
    
    return par[i] = root(par[i]);
}

int main() {
    
    cin.tie(0);
    cin.sync_with_stdio(false);
    ios_base::sync_with_stdio(false);
    
    //์ž…๋ ฅ ๋ฐ ์„ธํŒ…
    int n, m;
    cin >> n >> m;
    
    for(int i=0; i<=n; i++){
        par[i] = i;
    }
    
    while(m--) {
        int op, a, b;
        cin >> op >> a >> b;
        
        int A = root(a);
        int B = root(b);
        
        //ํ•ฉ์ง‘ํ•ฉ ์—ฐ์‚ฐ
        if(op == 0 && A != B){
            par[A] = B;
        }
        
        //ํฌํ•จ์—ฌ๋ถ€ ํ™•์ธ ์—ฐ์‚ฐ
        else if(op == 1){
            if(A == B)
                cout << "yes\n";
            else
                cout << "no\n";
        }
    }
    
    return 0;
}

 

๋ฐ˜์‘ํ˜•