[ 문제 ]
[ 접근방법 ]
파티에서 거짓말을 들은 사람은 다른 파티에서 무조건 거짓말만을 들어야 한다.
따라서 진실을 아는 사람과 엮인 사람들은 무조건 진실을 들어야 한다.
처음에는 BFS를 활용하여 진실을 들어야 하는 사람을 미리 구한다.
그 후, 각 파티에 진실을 들어야 하는 사람이 존재하는지를 체크해준 후 없어도 된다면
거짓말을 해준다.
[ 소스코드 ]
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m, k, a, b, ans;
bool known[55], chk;
vector<int> party[55], vec[55];
queue<int> que;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> k;
while(k--){
cin >> a;
que.push(a);
known[a] = true;
}
for(int i = 0; i < m; i++){
cin >> k >> a;
party[i].push_back(a);
while(--k){
cin >> b;
party[i].push_back(b);
vec[a].push_back(b);
vec[b].push_back(a);
}
}
while(!que.empty()){
int qf = que.front();
que.pop();
for(auto i : vec[qf]){
if(known[i])continue;
que.push(i);
known[i] = true;
}
}
for(int i = 0; i < m; i++){
chk = true;
for(auto j : party[i]){
if(known[j]){
chk = false;
break;
}
}
if(chk)ans++;
}
cout << ans;
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 15990 : 1, 2, 3 더하기 5 (0) | 2024.09.06 |
---|---|
[ 백준 / C++ ] 11505 : 구간 곱 구하기 (0) | 2024.09.04 |
[ 백준 / C++ ] 12851 : 숨바꼭질 2 (0) | 2024.08.26 |
[ 백준 / C++ ] 17070 : 파이프 옮기기 1 (0) | 2024.08.21 |
[ 백준 / C++ ] 2096 : 내려가기 (0) | 2024.08.20 |