#P1103. 黑白树

黑白树

问题描述

面条老师捡到一颗黑白相间的树,这颗树有 nn 个节点,其中 kk 个节点是黑色的。

面条老师觉得,现在的树配色实在是杂乱无章,于是面条老师决定使用他祖传的剪刀来对这颗树进行修剪,面条老师可以选择一个边的集合 e1,e2...,eki[1..k],j[1..k]e_1, e_2...,e_k(\forall i \in [1..k], j \in [1..k], 如果 iji \neq j, 那么就有 eieje_i \neq e_j),然后将这些边全部用祖传剪刀剪掉。可以预料到的是,树会分裂成 k+1k+1 个小树。面条老师希望这 k+1k+1 个小树都恰好有一个黑色节点。

面条老师在准备开始剪之前突然想到一个问题:有多少种不同的边的集合可以让修剪后的 k+1k+1 个小树都恰好有一个黑色节点呢?

面条老师修剪树是一把好手,可是在思考问题上却遇到了很大的困难。你作为面条老师的好朋友,你能告诉他这个不同的边的集合的数量是多少么?

输入描述

第一行是一个正整数 nn,表示面条老师捡到的树的顶点的数量。

第二行包含树的描述:n1n-1个整数 p0,p1,p2,...,pn2(0pii)p_0, p_1, p_2, ..., p_{n-2} (0 \leq p_i \leq i), pip_i 代表一条连接 i+1i+1pip_i的边。

第三行是 nn 个整数: x0,x1,...,xn1x_0, x_1, ..., x_{n-1},当 xi=0x_i = 0 时意味着节点 ii 是白色的,当 xi=1x_i = 1 时意味着节点 ii 是黑色的。数据保证 xix_i 的取值只会是 0011

输出描述

输出仅一个整数,表示不同的边集的数目,这个数字可能会很大,所以你只需要告诉面条老师这个数字对 1e9+71e9 + 7 取模后的答案就可以了。

3
0 0
0 1 1
2
10
0 1 2 1 4 4 4 0 8
0 0 0 1 0 1 1 0 0 1
27

数据范围与约定

对于所有的数据,均满足 1n1051 \leq n \leq 10^{5}

测试点编号 数据范围 特殊约束
11 2n102 \leq n \leq 10
232-3 2n1052 \leq n \leq 10^5 保证只有 22 个黑色节点
454-5 保证有n1n-1个黑色节点
6106-10

大样例

大样例下载