loj#P3393. 「2020-2021 集训队作业」Game on Tree

    ID: 16579 传统题 3000ms 512MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>数学多项式 / 形式幂级数DP树形 DP组合计数博弈论20202021

「2020-2021 集训队作业」Game on Tree

题目描述

Aruba 和 Ball 又在玩游戏,下面将他们分别简称为 A 和 B。

给定一棵 nn 个点的有根树,标号从 11nn,根的标号是 11。每个节点的儿子数只能为 0022。将节点分成下列三类:

  • A{A}:到根距离为偶数的所有非叶节点的集合,其中根到自己的距离为 00
  • B{B}:到根距离为奇数的所有非叶节点的集合
  • L{L}:叶节点的集合

而对于所有叶子节点 uLu\in{L},都会被分配一个二元组 (c(u),d(u))(c(u), d(u))。其中 ccdd 可以看成是定义域为 L{L} 的函数。

游戏开始前:
A 对于 A{A} 中的每个点 uu,从 uu 的两条指向儿子的边中选择一条,将其标记为重边;
B 对于 B{B} 中的每个点 uu,从 uu 的两条指向儿子的边中选择一条,将其标记为重边。

A 的选择可以看成一个定义域为 A{A} 的映射函数 ff; B 的选择可以看成一个定义域为 B{B} 的映射函数 gg

那么一个有序对 (f,g)(f,g) 被称为一组策略。可以看出,A 有 2A2^{|{A}|} 种不同的选择,B 有 2B2^{|{B}|} 种不同的选择。
所以一共有 2A+B2^{|{A}|+|{B}|} 组不同的策略。

当策略确定之后,从树根开始,不断沿着重边往下走,直到走到某个叶子节点 uu。这时 A 的分数是 c(u)c(u),B的分数是 d(u)d(u)
一组策略 (f,g)(f, g) 如果满足以下条件,那么该组策略是一个纳什均衡点:

  • 在 A 的策略不改变的情况下,B 无法通过改变自己的策略获得更高分。即在策略 (f,g)(f, g') 中 B 的得分总小于等于 (f,g)(f,g) 中 B 的得分。
  • 在 B 的策略不改变的情况下,A 无法通过改变自己的策略获得更高分。即在策略 (f,g)(f', g) 中 A 的得分总小于等于 (f,g)(f,g) 中 A 的得分。

给定树形态和 kk。令 ccdd 的值域是 Z[1,k]{Z}\cap[1,k],那么一共有 k2Lk^{2|{L}|} 组不同的 (c,d)(c,d)
现在要求对每组不同的 (c,d)(c, d) 都计算纳什均衡点的个数。由于 k2Lk^{2|{L}|} 过大,所以输出这 k2Lk^{2|{L}|} 个答案的和。这个和可能还是过大,所以输出和对 pp 取模后的值。即,求

$$\left(\sum_{c\in{{L}\to[k]}}\sum_{d\in{{L}\to[k]}}F(c,d)\right)\bmod p $$

其中 L[k]{L}\to[k] 是所有定义域为 L{L},值域为 [k]={1,2,,k}[k]=\{1,2,\dots,k\} 的函数集。 F(c,d)F(c, d) 是指给定 ccdd 情况下的纳什均衡点个数。


A 和 B 认为这棵树太大了,想要只保留这棵树的一个子树。具体地,对于每一个节点 ss,删除树的其他部分,只保留点 ss 的子树,并以点 ss 作为树根开始游戏,将上面问题的答案记为 AnssAns_s

你需要求出所有 AnssmodpAns_s\bmod p

输入格式

第一行三个整数 n,k,p(3n5000,k109,n<p106)n,k,p(3\leq n\leq 5000,k\le 10^9,n< p\leq 10^6)。保证 nn 为奇数。

第二行包括 n1n-1 个整数 fa2,fa3,,fanfa_2,fa_3,\dots,fa_nfaifa_i 表示 ii 的父亲,1fai<i1\leq fa_i< i

输出格式

输出 nn 行,每行一个数,第 ii 行输出 AnsimodpAns_i\bmod p

3 2 114514
1 1
24
4
4
9 2 191981
1 1 3 4 4 3 7 7
8960
4
1152
24
4
4
24
4
4
11 45 233
1 1 3 3 5 5 4 4 9 9 
80
161
177
150
80
161
161
161
80
161
161

数据范围与提示

  • Subtask 1(20pts)1(20\,\mathrm{pts})n=99,k100n=99,k\leq 100pp 是质数。
  • Subtask 2(30pts)2(30\,\mathrm{pts})n=99n=99
  • Subtask 3(50pts)3(50\,\mathrm{pts})n=4999n=4999