• 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;
}