-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathP1043.cpp
79 lines (76 loc) · 1.55 KB
/
P1043.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define FOR(i, n) for(int i = 0 ; i < n ; i++)
#define MAXX 987654321
int partyCome[50][50];
int knowTruth[50];
queue<int> vTruth;
int trueParty[50];
int N, M;
int maxLie = 0;
void solve() {
while(!vTruth.empty()){
//printf("%d, ", vTruth.front());
//printf("\n");
if (1) {
int k = vTruth.front();
knowTruth[k] = -1;
vTruth.pop();
for (int m = 0; m < M; m++) {
if (partyCome[m][k]!=0) {
partyCome[m][k] = -1;
trueParty[m] = 1;
for (int n = 0; n < N; n++) {
if (partyCome[m][n]!=0) {
partyCome[m][n] = -1;
if (knowTruth[n] != 1 && knowTruth[n] != -1)
vTruth.push(n);
knowTruth[n] = 1;
}
}
}
}
}
}
}
int main() {
scanf("%d %d", &N, &M);
int kT;
scanf("%d", &kT);
FOR(i, kT) {
int n;
scanf("%d", &n);
knowTruth[n - 1] = 1;
vTruth.push(n - 1);
}
for (int i = 0; i < M; i++) {
int numP;
scanf("%d", &numP);
if (numP == 0)
maxLie--;
for (int j = 0; j < numP; j++) {
int n;
scanf("%d", &n);
partyCome[i][n - 1] = 1;
}
}
/*printf("BEFORE\n");
for (int i = 0; i < M; i++, printf("\n"))
for (int j = 0; j < N; j++)
printf("%d ", partyCome[i][j]);*/
solve();
/*printf("AFTER\n");
for (int i = 0; i < M; i++, printf("\n"))
for (int j = 0; j < N; j++)
printf("%d ", partyCome[i][j]);
printf("TRUE PARTY\n");*/
for (int i = 0; i < M; i++)
if (trueParty[i] == 0)
maxLie++;
printf("%d\n", maxLie);
}