• toc {:toc}

๐Ÿ“ฆ1043: ๊ฑฐ์ง“๋ง


[์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] ๊ฐ•๋™๊ทœ
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-08
๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

ํ’€์ด

  • vector์˜ ์ด๋ฆ„ ์„ค์ •์ด ํ—ท๊ฐˆ๋ ค์„œ ํ’€์ด๊ฐ€ ๋А๋ ธ๋‹ค.

  • ์‚ฌ์ „ ์„ค์ •

  1. party[i]๋Š” i ๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ์ฐธ๊ฐ€ํ•˜๋Š” ํŒŒํ‹ฐ ๋ฒˆํ˜ธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  2. participant[i]๋Š” i ๋ฒˆ์งธ ํŒŒํ‹ฐ์— ์ฐธ์—ฌํ•˜๋Š” ์ฐธ๊ฐ€์ž์˜ ๋ฒˆํ˜ธ ๋ชจ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, 1๋ฒˆ์งธ ํŒŒํ‹ฐ์—์„œ 1, 2, 3, 4๊ฐ€ ์ฐธ์—ฌํ•˜๋Š” ๊ฒฝ์šฐ participant[1]์—๋Š” {1, 2, 3, 4}๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.
  • ํ’€์ด
  1. ์ง„์‹ค์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ํ์— ๋„ฃ๋Š”๋‹ค.
  2. BFS๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ง„์‹ค์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๊ณผ ํ•จ๊ป˜ ํŒŒํ‹ฐ์— ์ฐธ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ชจ๋‘ ์ฒดํฌํ•œ๋‹ค.
  3. ํ•œ ํŒŒํ‹ฐ ์•ˆ์—์„œ ์ง„์‹ค์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์—†๋‹ค๋ฉด res๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  4. res๋ฅผ ์ตœ์ข… ์ถœ๋ ฅํ•œ๋‹ค.
#include <iostream>
#include <vector>
#include <queue>
#define endl '\n';
using namespace std;
 
vector<int> party[51] = {};  // N, i๋ฒˆ์งธ ์‚ฌ๋žŒ์˜ ์ฐธ๊ฐ€ํ•˜๋Š” ํŒŒํ‹ฐ ๋ฒˆํ˜ธ
vector<int> participant[51] = {};  // M, ํŒŒํ‹ฐ ์ฐธ๊ฐ€์ž
int truth[51];
int N, M, res=0;
queue<int> q;
 
void Input(){
    cin >> N >> M;
    int val;
    cin >> val;
    for(int j=1; j<=val; j++){
        int number;
        cin >> number;
        truth[number] = 1;
        q.push(number);
    }
    for(int i=1; i<=M; i++){
        int val;
        cin >> val;
        for(int j=1; j<=val; j++){
            int number;
            cin >> number;
            party[number].push_back(i);
            participant[i].push_back(number);
        }
    }
}
 
void bfs(){
    while(!q.empty()){
        int number = q.front(); q.pop();
        for(auto partyNum : party[number]){
            for(auto temp : participant[partyNum]){
                if(truth[temp] == 1) continue;
                truth[temp] = 1;
                q.push(temp);
            }
        }
    }
}
 
void Solution(){
    bfs();
    for(int i=1; i<=M; i++){
        int flag = 1;
        for(auto number : participant[i]){
            if(truth[number]==1){
                flag = 0;
                break;
            }
        }
        if(flag){
            res++;
        }
    }
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    Input();
    Solution();
    cout << res << endl;
 
    return 0;
}