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)
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) |
English