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
import sys

data = sys.stdin.read().strip().splitlines()

n, sale1 = map(int, data[0].split())

# jakie byly wymagane poprzednie sale ktorego dnia w ktorej sali
DNI = [[0] * sale1]
# ile uczestnikow minimalnie musi byc w kazdej sali
UCZESTNICY = [[0] * sale1]

for i in range(1, n):
    linia = list(map(int, data[i].split()))
    DNI.append(linia[1:])
    UCZESTNICY.append([1 if i==n-1 else 0] * linia[0])

best = sum(UCZESTNICY[-1])

# cofamy sie idac od ostatniego dnia
for dzien in range(n-1, 0, -1):

    d = DNI.pop()
    uczest = UCZESTNICY.pop()

    # jesli danego dnia byla wymagana obecnosc w innej sali to wszyscy uczestnicy
    # z tego dnia musza isc do tamtej sali dzien wczesniej
    for sala, prev in enumerate(d):
        if prev > 0:
            UCZESTNICY[-1][prev-1] += uczest[sala]

    # a jesli nie to ktos bedzie musial pojsc do tej sali zeby ja zajac
    UCZESTNICY[-1] = [x or 1 for x in UCZESTNICY[-1]]

    # zliczamy ile uczestnikow tego dnia musi byc w salach
    best = max(best, sum(UCZESTNICY[-1]))

print(best)