问题描述
森林里有 n n n只动物,编号从1到 n n n,编号越小的动物能力越大。他们想投票选出森林之王,每只小动物可以投票选自己,或者与自己的偶像投票相同;如果没有偶像,就只能投自己。 已知小动物是否有偶像以及具体是谁,求每个人能够得到的最高票数是多少?
问题分析
崇拜的关系是传递的,如果崇拜关系当做树的一条边,题目所求即以 i i i为根的某棵树的节点数。此外,因为动物顺序是按照能力从大到小排序,所以后向遍历有 a n s [ A [ i ] ] + = a n s [ i ] ans[A[i]] += ans[i] ans[A[i]]+=ans[i]
代码示例
n = int(input())
ans = [0] * (n + 1)
animal_list = [-1] + list(map(int, input().split()))
for i in range(n, 0, -1):
ans[i] += 1
ans[animal_list[i]] += ans[i]
for i in range(1, n + 1):
print(ans[i])