AT_agc068_d [AGC068D] Sum of Hash of Lexmin

题目描述

有一棵以 $1$ 为根、包含 $N$ 个顶点的有根树 $T$,顶点编号为 $1$ 到 $N$。顶点 $1$ 是根,对于每个 $2 \leq i \leq N$,顶点 $i$ 的父节点为 $P_i$($P_i < i$)。 对于 $1$ 到 $N$ 的一个排列 $x=(x_1,x_2,\cdots,x_N)$,判断它是否为**良好**排列的方法如下: - 对于排列 $x$,可以进行如下操作: - 选择排列中相邻的两个元素 $u,v$,如果 $u,v$ 在树 $T$ 上存在祖先-子孙关系(无论谁是祖先谁是子孙均可),则可以交换 $u,v$ 的位置。 - 如果经过若干次(可以为 $0$ 次)上述操作,能够得到一个字典序严格小于初始排列的排列,则 $x$ 不是良好排列。否则,$x$ 是良好排列。 给定正整数 $B$。对于排列 $x$,定义 $\operatorname{hash}(x)=\sum_{1 \leq i \leq N} B^{i-1} \times x_i$。 请计算所有良好排列 $x$ 的 $\operatorname{hash}(x)$ 之和,并对 $998244353$ 取模后输出。 数列的字典序定义如下:设 $S=(S_1,S_2,\ldots,S_{|S|})$,$T=(T_1,T_2,\ldots,T_{|T|})$,则 $S$ 的字典序小于 $T$ 当且仅当满足以下两条之一: 1. $|S| < |T|$ 且 $(S_1,S_2,\ldots,S_{|S|}) = (T_1,T_2,\ldots,T_{|S|})$。 2. 存在整数 $1 \leq i \leq \min\lbrace |S|,|T| \rbrace$,使得 - $(S_1,S_2,\ldots,S_{i-1}) = (T_1,T_2,\ldots,T_{i-1})$, - $S_i < T_i$。

输入格式

输入为一行,格式如下: > $N$ $B$ $P_2$ $P_3$ $\cdots$ $P_N$

输出格式

输出答案。

说明/提示

### 数据范围 - $2 \leq N \leq 100$ - $1 \leq B < 998244353$ - $1 \leq P_i < i$($2 \leq i \leq N$) - 输入的所有值均为整数 ### 样例解释 1 例如,$x=(3,1,2)$ 不是良好排列。因为可以交换 $3,1$(它们在树上有祖先-子孙关系),得到 $x=(1,3,2)$,其字典序更小。在本样例中,良好排列为 $x=(1,2,3)$ 和 $x=(1,3,2)$ 共 $2$ 个。因此,$\operatorname{hash}((1,2,3))+\operatorname{hash}((1,3,2))=30201+20301=50502$,输出 $50502$。 ### 样例解释 2 在本样例中,任意两个顶点都存在祖先-子孙关系。因此,唯一的良好排列为 $x=(1,2,3,4,5)$。 由 ChatGPT 4.1 翻译