#CF1806D. DSU Master

    ID: 1368 传统题 2000ms 512MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>2500Codeforces组合数学动态规划分类讨论

DSU Master

DSU Master

  • 时间限制:2 秒
  • 内存限制:512 MiB

题目描述

给定一个整数 nn 和一个长度为 n−1n-1 的数组 aa,其中每个元素都是 00 或 11。

我们定义一个长度为 m−1m-1(m≤nm \leq n)的排列 pp 的值如下:

令 GG 为一个有 mm 个顶点的图,顶点编号为 11 到 mm,初始时没有任何边。对于每个 ii 从 11 到 m−1m-1,执行以下操作:

  • 设 uu 和 vv 分别为包含顶点 pip_i 和 pi+1p_i+1 的弱连通分量中仅有入边的(唯一)顶点;
  • 如果 api=0a_{p_i}=0,则在图 GG 中添加一条从顶点 vv 指向 uu 的有向边;否则(即 api=1a_{p_i}=1),添加一条从 uu 指向 vv 的有向边。

注意,每一步操作后,可以证明 GG 的每个弱连通分量都恰好有一个仅有入边的顶点。排列 pp 的值定义为 GG 中顶点 11 的入边数。

对于每个 kk 从 11 到 n−1n-1,求所有长度为 kk 的排列的值之和(共 k!k! 个排列)。由于答案可能很大,只需输出对 998 244 353998\,244\,353 取模的结果。

当 n=3n=3,a=[0,1]a=[0,1] 且 p=[1,2]p=[1,2] 时的操作示意图。

题目插图

†^\dagger 长度为 nn 的排列是一个包含 11 到 nn 的所有整数且顺序任意的数组。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是(22 出现了两次),[1,3,4][1,3,4] 也不是(n=3n=3 但数组中有 44)。

‡^\ddagger 有向图的弱连通分量与其无向版本的连通分量相同。形式化地,对于有向图 GG,定义图 HH,对于 GG 中的每条边 a→ba \to b,在 HH 中添加一条无向边 a↔ba \leftrightarrow b。则 GG 的弱连通分量即为 HH 的连通分量。

††^{\dagger\dagger} 注意,没有任何边的顶点也被认为是仅有入边的顶点。

输入格式

第一行包含一个整数 tt(1≤t≤1041\le t\le 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn(2≤n≤5⋅1052\le n\le 5 \cdot 10^5)。

第二行包含 n−1n-1 个整数 a1,a2,…,an−1a_1, a_2, \ldots, a_{n-1}(aia_i 为 00 或 11)。

保证所有测试用例中 nn 的总和不超过 5⋅1055 \cdot 10^5。

输出格式

对于每个测试用例,输出一行 n−1n-1 个整数,第 ii 个整数表示 k=ik=i 时的答案,对 998 244 353998\,244\,353 取模。

样例输入 1

2
3
0 0
9
0 1 0 0 0 1 0 0

样例输出 1

1 3 
1 2 7 31 167 1002 7314 60612

提示

考虑第一个测试用例。

当 k=1k=1 时,只有 11 个排列 pp。

  • 当 p=[1]p=[1] 时,会添加一条从顶点 22 指向 11 的边。顶点 11 有 11 条入边,所以 [1][1] 的值为 11。

因此当 k=1k=1 时,答案为 11。

当 k=2k=2 时,有 22 个排列 pp。

  • 当 p=[1,2]p=[1,2] 时,会添加一条从顶点 22 指向 11 的边,再添加一条从 33 指向 11 的边。顶点 11 有 22 条入边,所以 [1,2][1,2] 的值为 22。
  • 当 p=[2,1]p=[2,1] 时,会添加一条从 33 指向 22 的边,再添加一条从 22 指向 11 的边。顶点 11 有 11 条入边,所以 [2,1][2,1] 的值为 11。

因此当 k=2k=2 时,答案为 2+1=32+1=3。

数据范围

对所有数据,1≤t≤1041\le t\le 10^4,2≤n≤5×1052\le n\le 5\times 10^5,ai∈{0,1}a_i\in\{0,1\},且同一输入文件中所有测试用例的 nn 之和不超过 5×1055\times 10^5。

子任务编号 分值 特殊限制
1 30 t≤10t\le 10,n≤9n\le 9,且所有测试用例的 nn 之和不超过 3030
2 t≤20t\le 20,n≤5000n\le 5000,且所有测试用例的 nn 之和不超过 50005000
3 40 无特殊限制

各子任务的测试点独立计分。