2# 胖哥的树(tree.cpp/c/pas)
Description
问题描述】
胖哥有一棵 n 个节点的树,其中有一些节点是黑色的,另外一些节点是白色的。
考虑这棵树上的一个 k 条边的边集。如果胖哥将这 k 条边从树上删除,则将会把这棵树分成 K+1 个联通块。
现在,胖哥想知道,存在多少种这样的边集,使得删除这些边后,每个联通块只有一个黑色的节点。由于答案可能很大,请将答案 mod 1000000007(10^9+7)。
Format
Input
共三行,第一行包含一个整数 n,表示树的节点的个数。
第二行有 n-1 个整数 P0,P1,...,Pn-2。pi 表示第(i+1)个节点与第 Pi 个节点之间有一条边。假设树的节点的编号是从 0 到 n-1。
第三个有 n 个整数 X0,X1,...,Xn-1(Xi=0 或 1)。如果 Xi等于 1,表示节点 i 是黑色,反之则表示节点 i 是白色。
Output
输出共一行,包含一个整数,表示答案 mod 1000000007。
Sample 1
Input
3
0 0
0 1 1
Output
2
Sample 2
Input
6
0 1 1 0 4
1 1 0 0 1 0
Output
1
Sample 3
Input
10
0 1 2 1 4 4 4 0 8
0 0 0 1 0 1 1 0 0 1
Output
27
【数据说明】
对于 30%的数据,2≤n≤10。
对于 60%的数据,2≤n≤1000。
对于 100%的数据,2≤n≤100000。
Limitation
1s, 256MiB for each test case.
Source
2018年泉州复赛模拟提高组 day3t2
信息
- 难度
- 9
- 分类
- (无)
- 标签
- 递交数
- 5
- 已通过
- 2
- 通过率
- 40%
- 上传者