蓝桥杯左儿子右兄弟(不用树和DFS)

蓝桥杯左儿子右兄弟(不用树和DFS),第1张

作为初学者我不太会用python来实现树结构,所以想了一个不用树和dfs的方法。


n=int(input())
father=[0 for i in range(n+5)]        #father[i]为i的父节点序号
depth=[0 for i in range(n+5)]        #该节点的最大深度,叶节点为0,题目所求为depth[1]
son=[0 for i in range(n+5)]        #i节点儿子个数
for i in range(2,n+1):        
    m=int(input())
    father[i]=m
    son[m]+=1
for i in range(n,0,-1):        
    f=father[i]        
    deep=depth[i]+son[f]        
    if deep>depth[f]:        
        depth[f]=deep        
print(depth[1])     

第一个for循环确定father和son的个数

第二个for循环反向遍历节点,根据题目的条件,父节点序号小于子节点,于是子节点总是比父节点先遍历。


然后根据 depth[father]=son个数+max{depth[son1],depth[son2]......}

在遍历i节点时将(depth[i]+son[father[i]])与目前的depth[father[i]]比较,若更大,就更新depth[father[i]]的值。


最后输出depth[1]即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存