题目描述
给出一棵 n 个节点的树,每个点有点权 av。定义一棵树的一个子连通块为一个树中点的非空集合,满足这些点在树上形成一个连通块。定义子连通块 S 的权值为 ∏v∈S(av+∣S∣)。求所有子连通块的权值之和对 UV 取模。
输入格式
第一行,三个正整数 n,U,V,分别表示节点个数,以及模数(UV)。
第二行,n−1 个正整数 f2,f3,…,fn,分别表示以 1 节点为根节点的情况下第 i 个点的父亲节点。
第三行,n 个非负整数 ai,表示每个点的点权。
输出格式
一行,一个正整数,表示所有子联通块的权值之和,对 UV 取模。
3 10 6
1 1
1 2 3
156
11 4 6
1 1 2 3 4 4 4 5 6 7
325 190 400 325 380 165 334 400 80 171 340
678
提示
样例解释
对于样例 1,以下子连通块的权值分别是:
- {1}:(1+1)=2;
- {2}:(2+1)=3;
- {3}:(3+1)=4;
- {1,2}:(1+2)×(2+2)=12;
- {1,3}:(1+2)×(3+2)=15;
- {1,2,3}:(1+3)×(2+3)×(3+3)=120。
总和为 2+3+4+12+15+120=156,对 106 取模后为 156。
数据范围
本题采用捆绑测试。
Subtask |
特殊性质 |
Score |
1 |
n≤10 |
5 |
2 |
n≤150 |
8 |
3 |
n≤500 |
11 |
4 |
U=2,V=1 |
7 |
5 |
V=1 |
23 |
6 |
U∣ai |
7 |
无特殊限制 |
对于 100% 的数据:1≤n≤2000,1≤fi<i,2≤U≤10,1≤V≤6,0≤ai<UV。