#ATagc068d. [AGC068D] Sum of Hash of Lexmin
[AGC068D] Sum of Hash of Lexmin
题目描述
有一棵以 为根、包含 个顶点的有根树 ,顶点编号为 到 。顶点 是根,对于每个 ,顶点 的父节点为 ()。
对于 到 的一个排列 ,判断它是否为良好排列的方法如下:
- 对于排列 ,可以进行如下操作:
- 选择排列中相邻的两个元素 ,如果 在树 上存在祖先-子孙关系(无论谁是祖先谁是子孙均可),则可以交换 的位置。
- 如果经过若干次(可以为 次)上述操作,能够得到一个字典序严格小于初始排列的排列,则 不是良好排列。否则, 是良好排列。
给定正整数 。对于排列 ,定义 $\operatorname{hash}(x)=\sum\_{1 \leq i \leq N} B^{i-1} \times x\_i$。
请计算所有良好排列 的 之和,并对 取模后输出。
数列的字典序定义如下:设 ,,则 的字典序小于 当且仅当满足以下两条之一:
- 且 $(S\_1,S\_2,\ldots,S\_{|S|}) = (T\_1,T\_2,\ldots,T\_{|S|})$。
- 存在整数 ,使得
- $(S\_1,S\_2,\ldots,S\_{i-1}) = (T\_1,T\_2,\ldots,T\_{i-1})$,
- 。
输入格式
输入为一行,格式如下:
输出格式
输出答案。
样例 1
输入
3 100
1 1
输出
50502
样例 2
输入
5 100
1 2 3 4
输出
504030201
样例 3
输入
10 248730679
1 2 1 2 5 6 1 8 1
输出
856673861
样例 4
输入
20 480124393
1 2 3 2 3 4 3 8 3 4 11 10 4 14 15 12 17 18 19
输出
488941820
说明/提示
数据范围
- ()
- 输入的所有值均为整数
样例解释 1
例如, 不是良好排列。因为可以交换 (它们在树上有祖先-子孙关系),得到 ,其字典序更小。在本样例中,良好排列为 和 共 个。因此,$\operatorname{hash}((1,2,3))+\operatorname{hash}((1,3,2))=30201+20301=50502$,输出 。
样例解释 2
在本样例中,任意两个顶点都存在祖先-子孙关系。因此,唯一的良好排列为 。
由 ChatGPT 4.1 翻译