- toc {:toc}
π¦1043: κ±°μ§λ§
[μκ³ λ¦¬μ¦ νμ΄] κ°λκ·
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-08
λ¬Έμ νμΈνκΈ°
νμ΄
- vector μ μ΄λ¦ μ€μ μ΄ ν·κ°λ €μ νμ΄κ° λλ Έλ€.
- μ¬μ μ€μ
- party[i] λ i λ²μ§Έ μ¬λμ΄ μ°Έκ°νλ νν° λ²νΈλ₯Ό μλ―Ένλ€.
- participant[i] λ i λ²μ§Έ νν°μ μ°Έμ¬νλ μ°Έκ°μμ λ²νΈ λͺ¨μμ μλ―Ένλ€. μ¦, 1 λ²μ§Έ νν°μμ 1, 2, 3, 4 κ° μ°Έμ¬νλ κ²½μ° participant[1] μλ {1, 2, 3, 4}κ° λ€μ΄μλ€.
- νμ΄
- μ§μ€μ μκ³ μλ μ¬λλ€μ νμ λ£λλ€.
- BFS λ₯Ό μ§ννλ©΄μ μ§μ€μ μκ³ μλ μ¬λκ³Ό ν¨κ» νν°μ μ°Έμ¬νλ μ¬λλ€μ λ²νΈλ₯Ό λͺ¨λ 체ν¬νλ€.
- ν νν° μμμ μ§μ€μ μκ³ μλ μ¬λμ΄ μλ€λ©΄ res λ₯Ό μ¦κ°μν¨λ€.
- 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;
}