#P14880. [OOI2022预选赛long]Древо жизни生命之树

[OOI2022预选赛long]Древо жизни生命之树

题目描述

假设每个人的命运都是注定的:存在一棵固定的有根树,称为生命之树。树是一个包含 nn 个顶点和 n1n-1 条边的连通图。在有根树中,有一个特殊顶点称为根。

顶点 ii 的父亲指的是从根到 ii 的路径上,最靠近 ii 的前一个顶点。

共有 nn 个可能发生的事件,第 ii 个事件发生带来的幸福值为 aia_i。若 ai>0a_i>0,则称该事件是快乐事件。

考虑任意一种把事件安排到生命之树顶点上的方式:每个顶点对应恰好一个事件,每个事件也对应某个顶点。

我们把这种命运的公平性定义为:从根出发,只允许经过快乐事件所在的顶点,可以到达的所有事件的幸福值之和。也就是说,统计那些从根到该顶点路径上所有事件都是快乐事件的顶点对应事件的幸福值之和。

现在要求对所有可能的事件安排方式,求公平性的总和。

两种安排方式不同,当且仅当存在某个顶点,它们对应的事件编号不同。

由于答案可能很大,请对 109+710^9+7 取模。

输入格式

第一行输入一个整数 nn,表示生命之树的顶点数,也是事件数。

第二行输入 n1n-1 个整数:

p2,p3,ldots,pn,p_2,p_3,\\ldots,p_n,

其中 pip_i 表示顶点 ii 的父亲。生命之树的根为顶点 11

第三行输入 nn 个整数:

a1,a2,ldots,an,a_1,a_2,\\ldots,a_n,

表示每个事件的幸福值。

输出格式

输出一个整数,表示所有安排方式下公平性的总和,对 109+710^9+7 取模后的结果。

数据范围

对于所有测试数据:

2n200000,2 \le n \le 200000, 1pi<i,1 \le p_i < i, ai109.|a_i| \le 10^9.

样例 1

输入

3
1 1
1 2 -1

输出

12

样例 2

输入

4
1 2 1
2 0 3 1

输出

144

样例 3

输入

7
1 1 2 1 2 3
4 -1 2 0 -3 9 -1

输出

33480

样例解释

原题给出了第一个样例中所有 6 种事件安排方式对应的树,其中用颜色标出了可达的快乐事件。

评分方式

测试点分为 7 组。只有通过某一组的全部测试,并通过该组依赖的必要组,才能获得该组分数。

组别 分数 附加限制 必要组 说明
0 样例测试
1 15 n10n \le 10 0
2 10 n20n \le 20 0, 1
3 12 pi=1p_i=1
4 16 n200n \le 200 0, 1, 2
5 13 n2000n \le 2000 pi=i1p_i=i-1
6 15 5
7 19 0–6