2021蓝桥杯省赛左兄弟右孩子(python组)
这是一个来自2021年蓝桥杯的题目,分值占比比较大,将树的题目用动态规划和dfs来解决。
将树放到列表中
输入要按照数的要求放到一个数组中 类如上面的官方给出来的例子,1,2,3,4,5 其中的2,3,4都是1 的孩子,5是2的孩子进行将数据放到对应的列表中。
n=int(input()) #输入n的个数
a=[[] for i in range(n+1)] #创建到n的数组
for i in range(2,n+1): #后面的数放到对应的父节点的列表中
t=int(input()) #输入对应的父节点 1,1,1,2
a[t].append(i)
进行遍历得出答案
在遍历得过程中我们应该知道它的最大长度会是它自己的深度加上兄弟的数,求出来他们中的最大值
def dfs(t):
ans=0
for i in range(len(a[t])):
ans=max(ans,dfs(a[t][i])+len(a[t]))
return ans
print(dfs(1))