5057.树异或价值

时间限制:2s 内存限制:512MB

曾经有一棵 $n$ 个节点的有根树,其根节点的编号为 $1$。同时,小 $ω$ 有一个大小为 $n$ 的数组 $a_1, a_2, \cdots, a_n$。

定义数组 $a$ 的价值为:

$\sum\limits_{i=1}^n\sum\limits_{j=1}^n(a_i \oplus a_j)\times \operatorname{dep}_{LCA(i,j)}$

相关定义解释:

  • $⊕$ 表示按位异或。
  • $dep(x)$ 表示 $x$ 的深度,即 $x$ 到根节点的路径上节点的数量。
  • $LCA(i,j)$ 表示 $i$ 和 $j$ 的最近公共祖先。

不幸的是,很多年之后小 $ω$ 忘记了数组 $a$。但是他记得:

  • $∀1≤i≤n, 0≤a_i ≤2^k −1$,其中 $k 是一个给定的常数。
  • 在所有 $2^kn$ 种可能的 $a$ 数组中,小 $ω$ 的 $a$ 数组的价值是最大的。

小 $ω$ 并不满足于找到一个合法的 $a$ 数组,他更想知道有多少种 $a$ 数组能满足上述条件。答案可能很大,请输出其对 $998244353$ 取模的结果。

输入格式(从终端/标准输入读取)

输入包含多组测试数据。

第一行包含一个整数 $T (1≤T≤20)$,表示测试数据的组数。

对于每组测试数据,

第一行包含两个整数 $n, k (1≤n≤2×10^5 ,1≤k≤10^9 )$,表示树与 $a$ 数组的大小,$a$ 数组元素的上界。

第二行包含 $n−1$ 个整数 $p_2, p_3, \cdots, p_n(1 \le p_i \lt i)$, 其中 $p-i$ 表示树上节点 $i$ 的父亲。

输出格式(输出至终端/标准输出)

对于每组测试数据,输出一行一个整数,表示合法 $a$ 数组数量对 $998244353$ 取模的结果。

输入样例

复制
1
3 3
1 1
 \n
 · \n
 · \n

输出样例

复制
216
   \n
来源: 2024“钉耙编程”中国大学生算法设计超级联赛(9)

提交题解

Please login first.

© 2025 FAQs