当前位置:   article > 正文

第十四届蓝桥杯软件赛省赛python b组-试题F 树上选点(树形dp)_蓝桥杯14届题目 py

蓝桥杯14届题目 py

试题 F: 树上选点

时间限制: 10.0s

内存限制: 512.0MB

本题总分:15 分

【问题描述】

给定一棵树,树根为 1,每个点的点权为 Vi 

你需要找出若干个点 Pi,使得:

1. 每两个点 Px Py 互不相邻;

2. 每两个点 Px Py 与树根的距离互不相同;

3. 找出的点的点权之和尽可能大。

请输出找到的这些点的点权和的最大值。

【输入格式】

输入的第一行包含一个整数 

第二行包含 − 1 个整数 Fi ,相邻整数之间使用一个空格分隔,分别表示

第 2 至 个结点的父结点编号。

第三行包含 个整数 Vi,相邻整数之间使用一个空格分隔,分别表示每个

结点的点权。

【输出格式】

输出一行包含一个整数表示答案。

【样例输入】

5

1 2 3 2

2 1 9 3 5

【样例输出】

11

  1. n=int(input())
  2. f=list(map(int,input().split()))
  3. w=list(map(int,input().split()))
  4. f.insert(0,0)
  5. f.insert(1,1)
  6. w.insert(0,0)
  7. L=[0]*(n+1)
  8. L[1]=1
  9. dp=w[:]
  10. for i in range(2,n+1):
  11. L[i]=L[f[i]]+1
  12. for j in range(1,n+1):
  13. for x in range(1,n+1):
  14. if L[x]<L[j] and f[j]!=x:
  15. dp[j]=max(dp[j],dp[x]+w[j])
  16. print(max(dp))
  17. print(dp)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/64233
推荐阅读
相关标签
  

闽ICP备14008679号