Stable Fusion
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

“这将会是本世纪最伟大的发明!”——某匿名的火星研究所职员
在火星的一处研究所,研究员正使用机器人阵列来合成一种新型能源,被称作能量晶块 (Cube Fragment),最初在这里的研究员分解某种物质时意外发现。

机器人阵列由n个机器人组成,每个机器人被赋予内唯一的整数编号,除去阵列最高级别的机器人(固定为1号机器人),每个机器人都有一个直接上级。并且最后这些机器人的阵列会构成一个树形结构。
为了有效合成这种能量晶块,要求每个机器人所携带的能量晶块数不能超过其直接上级所携带的晶块数,并且每个机器人所能携带的能量晶块数不超过1000。
每个机器人初始都携带了若干个(可以是0)能量晶块,但是可能不满足上述要求,于是研究员打算进行调整。如果一个携带了x个能量晶块的机器人,现在想要让它携带y个能量晶块,则调整的代价为|x - y|,其中|t|表示取t的绝对值。

研究员希望知道,他最少需要花费多少代价完成调整,使得对于每个机器人,其携带的能量晶块数都小于等于其上级携带的能量晶块数。


输入描述:

输入第一行包含一个正整数n,表示阵列中机器人的总数。
第二行包含n - 1个正整数,相邻正整数之间使用一个空格符分隔,按照输入顺序的第i个记作f_i,表示编号为i+1的机器人的直接上级是f_i
第三行包含n个非负整数,相邻整数之间使用一个空格符分隔,按照输入顺序的第i个记作a_i,表示编号为i的机器人初始携带有a_i块能量晶块。

数据规范:
* .
* .
*
* 保证如果以机器人为顶点,以直接上下级关系为边,构成的图是一棵树。

输出描述:

输出一个非负整数,表示调整需要花费的最小代价。
示例1

输入

复制
3
1 1
5 8 8

输出

复制
3
示例2

输入

复制
3
1 1
2 2 3

输出

复制
1
示例3

输入

复制
3
1 2
2 2 6

输出

复制
4
示例4

输入

复制
5
1 1 1 1
2 3 5 7 11

输出

复制
9