返回首页 返回题库

路径覆盖

C++ 中等 GESP六级真题 #动态规划#树#贪心

题目描述

题面描述

给定一棵有个结点的有根树,结点依次以编号,根结点编号为1。方便起见,编号为的结点称为结点。

初始时中的结点均为白色。你需要将中的若干个结点染为黑色,使得所有叶子到根的路径上至少有一个黑色结点。将结点染为黑色需要代价,你需要在满足以上条件的情况下,最小化染色代价之和。

叶子是指中没有子结点的结点。

输入格式

第一行,一个正整数,表示结点数量。

第二行,个正整数,其中表示结点的父结点的编号,保证。

第三行,个正整数,其中表示将结点染为黑色所需的代价。

输出格式

一行,一个整数,表示在满足所有叶子到根的路径上至少有一个黑色结点的前提下,染色代价之和的最小值。

样例1

输入:

4
1 2 3
5 6 2 3

输出:

2

样例2

输入:

7
1 1 2 2 3 3
64 16 15 4 3 2 1

输出:

10

数据范围

对于40%的测试点,保证。

对于另外20%的测试点,保证。

对于所有测试点,保证,。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
本题考察树形动态规划的思想,由于结点编号满足父结点编号小于子结点,可以按照从后往前的顺序遍历结点,对于每个结点,选择当前结点染色或者将所有子结点的最小代价相加,取较小值即可。注意使用long long类型避免数据溢出。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 2 浏览

讨论(0)