3721 - 粗心的小Biu
描述

小Biu有一棵 n 个节点的树,1 号节点是这棵树的根,每个节点上有一个权值 a(为非负整数)。
老师要求小Biu把每个节点计算一个新的权值 b,权值 b 的大小为根节点到当前节点路径上所有节点的 a 权值之和。
小Biu完成这个任务之后,由于太粗心,他不小心擦除了所有节点上的权值 a 和偶数层上节点的权值 b。
现在小Biu想知道,他如何安排每个被擦除的节点上的权值 a,才能在满足"让整棵树的权值 a 的和最小"而且"让没有被擦除的 b 都是正确的"。
(树的层号从 1 开始,根节点在第 1 层;第 2、4、…等偶数层的 b 被擦除,记为 -1。)

输入

第1行:一个整数 n,表示树上节点的个数(1 <= n <= 100000)。
第2行:n-1 个整数,第 i 个整数表示第 i+1 个节点的父节点的编号 f[i](f[i] < i)。
第3行:n 个整数,第 i 个整数表示第 i 个节点的权值 b 的值 b[i],如果该节点在偶数层,则该值为 -1(-1 <= b[i] <= 10^9)。

输出

输出一行,表示满足条件的最小的整棵树的权值 a 的和。(数据保证答案存在)

样例

输入

5
1 2 3 1
1 -1 2 -1 -1

输出

2
提示

根节点的 a 就等于 b[根]。考虑任意一个偶数层节点 m,其父节点 u 是奇数层(b[u] 已知),m 的儿子都是奇数层(b 已知)。对每个儿子 v 有 a[m] + a[v] = b[v] - b[u]。要让总和最小,应把 a[m] 尽量取大:a[m] = min over v of (b[v] - b[u])。于是这一组 {m 及其奇数层子节点} 对答案的贡献 = Σ(b[v] - b[u]) - (儿子数 - 1) * min(b[v] - b[u])。叶子型偶数节点(无子节点)贡献 0。把所有偶数层节点的贡献与 b[根] 相加即为答案。

来源
51nod
标签
题目参数
时间限制 1 秒
内存限制 128 MB
提交次数 1
通过次数 1