https://www.acmicpc.net/problem/1043
Input1)
4 3
0
2 1 2
1 3
3 2 3 4
Output1)
3
Input2)
4 1
1 1
4 1 2 3 4
Output2)
0
Input3)
4 1
0
4 1 2 3 4
Output3)
1
pp = [[] for _ in range(m)] #party people
for i in range(m):
pp[i] = [int(x) for x in input()[2:].split()]
last = pp[i][0]
for p in pp[i][1:]:
graph[last].add(p)
graph[p].add(last)
last = p
else:
asw = [0] * (n + 1)
can_lie = set(list(range(1,n+1)))
for a in know_truth:
if a in can_lie:
vis = [0] * (n + 1)
dfs(a)
asw = [asw[i] + vis[i] for i in range(n + 1)]
for i in range(1,n+1):
if asw[i] > 0:
can_lie.discard(i)
n, m = [int(x) for x in input().split()]
know_truth = set()
s = input()
if s[0] != '0':
for a in s.split()[1:]:
know_truth.add(int(a))
graph = [set() for _ in range(n + 1)]
pp = [[] for _ in range(m)] #party people
for i in range(m):
pp[i] = [int(x) for x in input()[2:].split()]
last = pp[i][0]
for p in pp[i][1:]:
graph[last].add(p)
graph[p].add(last)
last = p
def dfs(s):
global graph, vis
vis[s] = 1
for a in graph[s]:
if vis[a] == 0:
dfs(a)
if len(know_truth) == 0: #'know_truth'가 없는 경우 - 모든 파티에서 거짓말 가능
print(m)
else:
asw = [0] * (n + 1)
can_lie = set(list(range(1,n+1)))
for a in know_truth:
if a in can_lie:
vis = [0] * (n + 1)
dfs(a)
asw = [asw[i] + vis[i] for i in range(n + 1)]
for i in range(1,n+1):
if asw[i] > 0:
can_lie.discard(i)
count = 0
for i in range(m):
this_p = set(pp[i])
if this_p-can_lie == set():
count += 1
print(count)