#P16972. [XRCOI Round 2] D. 树上的树

    ID: 18690 远端评测题 1000~2000ms 512MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>动态规划 DP多项式哈希 hashing组合数学生成函数AC 自动机

[XRCOI Round 2] D. 树上的树

背景

Kipfel 和 Zn 在玩一个名叫“树上的树”的游戏。

题目描述

游戏的具体流程如下:

  1. Zn 给 Kipfel 一共 kk无标号有根有序树 \bm{^\dagger},分别为 X1XkX_1 \sim X_k,这 kk 颗无标号有根有序树的第 ii 颗由 mim_i 个节点组成,且拥有一个属性 CiC_i

  2. Kipfel 造出一颗有 nn 个节点的无标号有根有序树 YY,并将 YY 再交给 Zn。

  3. Zn 从 YY 中选择一个打上标记的节点集合 SS,使得 SS 中任意两个节点互不相同(SS 可以为空集)。游戏结束。

Kipfel 是只笨猫,所以它会从所有可能的无标号有根有序树 YY等概率地选出一棵作为第二步的结果。同理,Zn 也会从第三步中所有可能选择的 SS等概率地选出一个作为第三步的结果。

规定 Zn 在第三步中选择的 SS 是“好的方案”,当且仅当对于 YY 中每个子树 TT,满足下列的至少一个条件:

  • TT 不与 X1XkX_1\sim X_k 中任何一颗无标号有根有序树同构。
  • TTXiX_i 同构,则需满足 VTSCi|V_T\cap S|\ge C_i(即 TT 中至少有 CiC_i 个节点被标记)。其中 VTV_T 表示 TT 的节点集合。

Zn 已经完成了游戏的第一步,但是游戏的第二步和第三步仍未进行。你需要求出第三步中 Zn 选择了 S\bm{|S|} 最小的“好的方案”的概率,并将答案对 998244353\bm{998244353} 取模。注意“S|S| 最小”的条件是对于第二步选择的 YY 而言的,不是对于所有可能的 YY 而言的。

::::info[\dagger 无标号有根有序树]

  • 无标号有根有序树:无标号的、每个节点的每个儿子间有顺序有根树。
  • T|T| 表示无标号有根有序树 TT 的节点个数;sonTson_T 表示无标号有根有序树 TT根的儿子个数Sub(T,i)\operatorname{Sub}(T,i) 表示以无标号有根有序树 TT 的根的第 ii 个儿子为根的子树。
  • 判断两颗无标号有根有序树 A,BA,B 是否同构的方法为:
    • A=B=1|A|=|B|=1,则 AABB 同构。
    • 否则,若 sonA=sonBson_A=son_B 且对于任何 1isonA1 \le i \le son_A 都满足 Sub(A,i)\operatorname{Sub}(A,i)Sub(B,i)\operatorname{Sub}(B,i) 同构,则 AABB 同构。 ::::

为了方便描述,我们在输入格式、样例解释中给每个节点赋予了一个编号,并钦定编号为 1\bm{1} 的节点为根。实际无标号有根有序树的节点是没有编号的。

输入格式

第一行包含两个非负整数 n,kn,k,分别表示 YY 的节点数、Zn 给出的无标号有根有序树的个数。

接下来对于 Zn 给出的每一颗无标号有根有序树 XiX_i

  • 第一行包含两个正整数 mi,Cim_i,C_i
  • 接下来的 mim_i 行:
    • 假设当前行是这 mim_i 行中的第 jj 行。首先输入一个非负整数 sjs_j 表示无标号有根有序树 XiX_i 中节点 jj 的儿子个数。
    • 紧接着在同一行输入 sjs_j 个正整数,其中第 xx 个正整数表示节点 jj 的第 xx 个儿子的编号。

输出格式

第一行包含一个非负整数,表示第三步中 Zn 选择了 S\bm{|S|} 最小的“好的方案”的概率。注意将答案对 998244353\bm{998244353} 取模

4 2
2 1
1 2
0
3 2
2 2 3
0
0
873463809
2 2
2 2
1 2 
0 
2 1
1 2 
0 

748683265
5 3
2 1
1 2 
0 
4 4
2 2 3 
1 4 
0 
0 
3 2
1 2 
1 3 
0 

938082305
7 3
4 3
2 2 4 
1 3 
0 
0 
2 1
1 2 
0 
6 5
2 2 3 
0 
2 4 6 
1 5 
0 
0 

344387212
4 3
1 1
0 
2 2
1 2 
0 
4 2
2 2 3 
0 
1 4 
0 

935854081

提示

【样例 1 解释】

ωY\omega_Y 表示无标号有根有序树 YY 的所有“好的方案”中 S|S| 的最小值。并且规定下图中每个父节点的儿子按照原树上的顺序从左到右排列。

这组样例中,Zn 给出的 22 颗无标号有根有序树 X1,X2X_1, X_2 的结构如图 11 所示。

Kipfel 可能造出的无标号有根有序树 Y1Y5Y_1\sim Y_5 如图 22 所示。其中,ωY1Y5\omega_{Y_1\sim Y_5} 值分别为 1,2,1,1,01, 2, 1, 1, 0

对于图 22Y1,Y2Y_1,Y_2 两棵树,一种可能的满足 S=ωY|S| = \omega_Y 的“好的方案”(即 S|S| 最小的“好的方案”)如图 33 所示。

Y1Y5Y_1\sim Y_5 满足 S=ωY|S| = \omega_{Y} 的“好的方案”分别有 2,3,2,2,12, 3, 2, 2, 1 种。第二步和第三步一共有 8080 种可能的方案,因此第一组样例的答案为 2+3+2+2+180=18\frac{2 + 3 + 2 + 2 + 1}{80} = \frac{1}{8}

【样例 2 解释】

这组样例的答案是 14\frac{1}{4}

【数据范围】

本题采用捆绑测试。

其中子任务 00 为样例,记 00 分,时间限制为 11 秒。

::cute-table{tuack} | Subtask 编号 | nn | kk | mim_i | i=1kmi\sum_{i=1}^{k}m_i | CiC_i |得分 | 时间限制 | | :----------: | :-----: | :-----: | :-----: | :--: | :------: | :------: | :------: |
| 11 | 7 \le 7 | 5\le 5 | 7\le 7 | 35\le 35 | mi\le m_i | 1010 | 11 秒 | | 22 | 400 \le 400 | =0=0 | 400\le 400 | < | ^ | 55 | 11 秒 | | 33 | 80 \le 80 | =1=1 | 80\le 80 | < | =1=1 | 1515 | 11 秒 | | 44 | 400 \le 400 | ^ | 400\le 400 | < | mi\le m_i | 2020 | 22 秒 | | 55 | 80 \le 80 | < | < | < | =1=1 | 1010 | 11 秒 | | 66 | 400 \le 400 | < | < | < | ^ | 1515 | 22 秒 | | 77 | ^ | ^ | ^ | ^ | mi\le m_i | 2525 | 22 秒 |

对于 100%100\% 的数据:保证 $1 \le n, m_i\le 400, 0 \le k\le 400, \sum_{i=1}^{k}m_i \le 400, 1\le C_i \le m_i,0\le s_j \le m_i$,数据保证每一颗给出的树都是合法的无标号有根有序树。