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

[๋ฐฑ์ค€,c++] 1043๋ฒˆ - ๊ฑฐ์ง“๋ง

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

๋ฌธ์ œ

 

1043๋ฒˆ: ๊ฑฐ์ง“๋ง

์ง€๋ฏผ์ด๋Š” ํŒŒํ‹ฐ์— ๊ฐ€์„œ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ํŒŒํ‹ฐ์— ๊ฐˆ ๋•Œ๋งˆ๋‹ค, ์ง€๋ฏผ์ด๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ๋งํ•  ๋•Œ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ง„์‹ค๋กœ ๋งํ•˜๊ฑฐ๋‚˜ ์—„์ฒญ๋‚˜๊ฒŒ

www.acmicpc.net

 

์ฝ”๋“œ

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

int parent[101];
int N, M;

void union_parent(vector<vector<int>> &party){
    for(int i=0; i<party.size(); i++){
        bool flag = false;
        for(int k=0; k<party[i].size(); k++){
            if(parent[party[i][k]] == -1){
                flag = true;
                break;
            }
        }
        if(flag){
            for(int k=0; k<party[i].size(); k++){
                parent[party[i][k]] = -1;
            }
        }
    }
    for(int i=party.size()-1; i>=0; i--){
        bool flag = false;
        for(int k=0; k<party[i].size(); k++){
            if(parent[party[i][k]] == -1){
                flag = true;
                break;
            }
        }
        if(flag){
            for(int k=0; k<party[i].size(); k++){
                parent[party[i][k]] = -1;
            }
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>N>>M;
    int know; cin>>know;
    for(int i=0; i<know; i++){
        int peo; cin>>peo;
        parent[peo] = -1;
    }
    
    vector<vector<int>> party;
    
    for(int i=0; i<M; i++){
        int cnt; cin>>cnt;
        vector<int> temp;
        for(int k=0; k<cnt; k++){
            int peo; cin>>peo;
            temp.push_back(peo);
        }
        party.push_back(temp);
    }
    
    int cnt = 50;
    while(cnt--) union_parent(party);

    int ans = 0;
    for(int i=0; i<party.size(); i++){
        bool flag = true;
        for(int k=0; k<party[i].size(); k++){
            if(parent[party[i][k]] == -1){
                flag = false;
                break;
            }
        }
        if(flag) ans ++;
    }
    
    cout<<ans;
}

 

ํ’€์ด

๋ฌธ์ œ ๋ถ„๋ฅ˜๋Š” ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ์ด์ง€๋งŒ ์ž…๋ ฅ๊ฐ’์ด 50๋ฐ–์— ๋“ค์–ด์˜ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ฃจํŠธํฌ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„์œผ๋กœ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ parent[์‚ฌ๋žŒ] = -1๋กœ ์„ธํŒ…ํ•ด์ฃผ๊ณ , ๋ชจ๋“  ํŒŒํ‹ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ์ด ํ•ด๋‹น ํŒŒํ‹ฐ์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ ํŒŒํ‹ฐ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ์œผ๋กœ ์„ธํŒ…ํ–ˆ์Šต๋‹ˆ๋‹ค.

input:
4 5
1 1
1 1
1 2
1 3
2 4 2
2 4 1
answer: 1

๋‹ค๋งŒ ์œ„์™€ ๊ฐ™์€ ์ž…๋ ฅ์ฒ˜๋Ÿผ ํŒŒํ‹ฐ์˜ ์ˆœ์„œ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒํ‹ฐ ํƒ์ƒ‰์„ ์•ž์—์„œ ๋„๋Š” ๊ฒฝ์šฐ์™€ ๋’ค์—์„œ ๋„๋Š” ๊ฒฝ์šฐ๋กœ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

input:
6 5
1 6
2 4 5
2 1 2
2 2 3
2 3 4
2 5 6
answer: 0

๋˜ํ•œ ํŒŒํ‹ฐ ํƒ์ƒ‰์„ ์•ž ๋’ค๋กœ ์ด ํ•œ ๋ฒˆ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์€ ์ž…๋ ฅ์—์„œ ์‚ฌ๋žŒ 2, 3์ด ๊ฐฑ์‹ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํŒŒํ‹ฐ์˜ ์ด ๊ฐฏ์ˆ˜์ธ 50๋งŒํผ ๋ฐ˜๋ณตํ•˜๋„๋ก ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€