def solve(lines):
first_count = int(lines[0])
parent_specs = []
level_sizes = [first_count]
#print("!", lines)
for line in lines[1:]:
parts = list(map(int, line.split()))
parents = parts[1:]
parent_specs.append(parents)
level_sizes.append(len(parents))
curr_values = [1] * level_sizes[-1]
best = sum(curr_values)
for depth in range(len(parent_specs) - 1, -1, -1):
prev_size = level_sizes[depth]
acc = [0] * prev_size
for child_value, p in zip(curr_values, parent_specs[depth]):
if p != 0:
acc[p - 1] += child_value
prev_values = [x if x > 0 else 1 for x in acc]
level_sum = sum(prev_values)
if level_sum > best:
best = level_sum
curr_values = prev_values
return best
k,n1 = input().split()
lines = [n1] +[input().strip() for _ in range(int(k)-1)]
ans = solve(lines)
print(ans)
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 | def solve(lines): first_count = int(lines[0]) parent_specs = [] level_sizes = [first_count] #print("!", lines) for line in lines[1:]: parts = list(map(int, line.split())) parents = parts[1:] parent_specs.append(parents) level_sizes.append(len(parents)) curr_values = [1] * level_sizes[-1] best = sum(curr_values) for depth in range(len(parent_specs) - 1, -1, -1): prev_size = level_sizes[depth] acc = [0] * prev_size for child_value, p in zip(curr_values, parent_specs[depth]): if p != 0: acc[p - 1] += child_value prev_values = [x if x > 0 else 1 for x in acc] level_sum = sum(prev_values) if level_sum > best: best = level_sum curr_values = prev_values return best k,n1 = input().split() lines = [n1] +[input().strip() for _ in range(int(k)-1)] ans = solve(lines) print(ans) |
English