Notice
Recent Posts
Recent Comments
Link
반응형
공부혜옹
백준 1043번 거짓말 본문
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m, t; // 문제의 수, 문제에 대한 정보의 개수
int parent[51];
int party[51][51];
int can;
vector<int> knowTrue;
int find (int x) {
if(x == parent[x]){
return x;
}
return x = find(parent[x]);
}
void unionset (int x, int y) {
x = find(x);
y = find(y);
parent[x] = y;
}
int check(int i) {
for (int j = 0; j < t; j++) {
//진실된 사람 있으면
if (find(party[i][0]) == find(knowTrue[j])) {
can--;
return 0;
}
}
return 0;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m >> t;
//진실을 알고있는 사람들
if(t == 0){
//진실을 아는사람이 없을때
cout << m;
return 0;
} else {
for(int i=0; i<t; i++){
int a;
cin >> a;
knowTrue.push_back(a);
}
}
for (int i = 0; i < n; i++) {
parent[i] = i;
}
for (int i = 0; i < m; i++) {
//몇명올지
int p;
cin >> p;
cin >> party[i][0];
for(int j=1; j<p; j++){
cin >> party[i][j];
unionset(party[i][0],party[i][j]);
}
}
can = m;
for (int i = 0; i < m; i++) {
check(i);
}
cout << can << '\n';
return 0;
}
반응형
'공부합시다 > Algorithm' 카테고리의 다른 글
백준 2133 타일 채우기 (0) | 2021.08.16 |
---|---|
백준 11057 오르막 수 (0) | 2021.08.15 |
백준 1052번 물병 (0) | 2021.07.13 |
백준 1766번 문제집 (0) | 2021.06.08 |
백준 2252번 줄세우기 (0) | 2021.06.08 |
Comments