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


data = list(map(int, sys.stdin.buffer.read().split()))

ptr = 0
k = data[ptr]
ptr += 1

n_by_day = [0] * (k + 1)
parents_by_day = [None] * (k + 1)

n1 = data[ptr]
ptr += 1
n_by_day[1] = n1

for day in range(2, k + 1):
    ni = data[ptr]
    ptr += 1
    n_by_day[day] = ni
    parents = data[ptr:ptr + ni]
    ptr += ni
    parents_by_day[day] = parents

req_next = [1] * n_by_day[k]
best = n_by_day[k]

for day in range(k - 1, 0, -1):
    n_cur = n_by_day[day]
    child_sum = [0] * n_cur

    parents_next = parents_by_day[day + 1]
    for parent, need in zip(parents_next, req_next):
        if parent:
            child_sum[parent - 1] += need

    req_cur = [0] * n_cur
    total_today = 0
    for i, s in enumerate(child_sum):
        need = s if s > 1 else 1
        req_cur[i] = need
        total_today += need

    if total_today > best:
        best = total_today
    req_next = req_cur

print(best)