Type: Default 2000ms 512MiB

[R29F]好树

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

时空限制

2S/512M

题目描述

给定一棵包含 nn 个节点的树和一个长度为 nn 的数组 dd

你需要为树上的每一个节点 uu 赋予一个整数权值,记作 AuA_u。称一种赋值方案是好的,当且仅当它满足以下两个条件:

  1. 对于任意节点 uu,其权值必须在 [1,n][1, n] 的范围内,即 1Aun1 \leq A_u \leq n
  2. 对于树上的任意一条边 (u,v)(u, v),两个端点权值的差的绝对值必须满足:AuAvdu+dv|A_u - A_v| \leq d_u + d_v

对于每一种好的的赋值方案,需要计算其所有节点的权值和的平方和。

形式化地,设 S\mathbb{S} 是所有合法赋值方案的集合,你需要计算:

$$\sum_{S \in \mathbb{S}} \left( \sum_{u=1}^{n} A_{S,u} \right)^2 \bmod{P} $$

其中 AS,uA_{S,u} 表示在方案 SS 中节点 uu 的权值。

由于答案可能很大,请将最终结果对给定的模数 PP 取模。

格式

输入格式

第一行包含两个整数 n,Pn, P,分别表示树的节点数量和模数。

接下来一行包含 nn 个整数,第 ii 个整数表示 did_i

接下来的 n1n-1 行,每行包含两个整数 u,vu, v,表示树上的一条边。

输出格式

输出一个整数,表示题目所求的最终值对 PP 取模后的结果。

样例

样例输入 #1

2 1000000
1 1
1 2

样例输出 #1

38

样例解释 #1

约束条件为 A1A2d1+d2=1+1=2|A_1 - A_2| \leq d_1 + d_2 = 1 + 1 = 2

故所有可能的赋值方案 (A1,A2)(A_1, A_2) 如下:

  • (1,1)(1, 1)11=02|1-1|=0 \leq 2。合法。权值和为 1+1=21+1=2。平方为 22=42^2=4
  • (1,2)(1, 2)12=12|1-2|=1 \leq 2。合法。权值和为 1+2=31+2=3。平方为 32=93^2=9
  • (2,1)(2, 1)21=12|2-1|=1 \leq 2。合法。权值和为 2+1=32+1=3。平方为 32=93^2=9
  • (2,2)(2, 2)22=02|2-2|=0 \leq 2。合法。权值和为 2+2=42+2=4。平方为 42=164^2=16

所有赋值方案都满足条件,所以共有 44 种合法的赋值方案。

故所有方案的权值和的平方和为 4+9+9+16=384 + 9 + 9 + 16 = 38

样例输入 #2

5 1000000
1 2 3 1 1
1 2 
1 3
2 4
3 5

样例输出 #2

630525

数据规模

对于 20%20\% 的数据,1n61\leq n \leq 6

对于 60%60\% 的数据,1n3001 \leq n \leq 300

对于 100%100\% 的数据,1n20001\leq n \leq 20001din1 \leq d_i \leq n2P1092 \leq P \leq 10^9

代码源挑战赛 Round 29

Not Attended
Status
Done
Rule
DMY
Start at
2025-9-12 20:00
End at
2025-9-12 21:30
Duration
1.5 hour(s)
Host
Partic.
523