:pig:
题目描述
在一个 $s$ 个点的图中,存在 $s-n$ 条边,使图中形成了 $n$ 个连通块,第 $i$ 个连通块中有 $a_i$ 个点。
现在我们需要再连接 $n-1$ 条边,使该图变成一棵树。对一种连边方案,设原图中第 $i$ 个连通块连出了 $d_i$ 条边,那么这棵树 $T$ 的价值为:
你的任务是求出所有可能的生成树的价值之和,对 $998244353$ 取模。
输入格式
输入的第一行包含两个整数 $n,m$,意义见题目描述。
接下来一行有 $n$ 个整数,第 $i$ 个整数表示 $a_i$ $(1\le a_i< 998244353)$。
- 你可以由 $a_i$ 计算出图的总点数 $s$,所以在输入中不再给出 $s$ 的值。
输出格式
输出包含一行一个整数,表示答案。
算法讨论
由于每个联通块有大小,所以答案要乘上$a_i^{d_i}$
需要枚举生成树,无法做
很不容易想到prufer序列,即这棵树可以由一个$n - 2$的序列表示,序列中每个元素出现次数$k_i+1$即为它在树上的度数,那么
中间一步$k_1+k_2+…+k_n=n-2$不好处理,于是构造生成函数:
于是答案就是$F(x)的第n-2项再乘(n-2)!$
由于n比较大,还是不好处理:
同理$B_i(x) = e^{a_ix}\sum_{j=0}^{2m}S(m+1,j+1)a_i^{j+1}x^j$
现在$A和B$的初始长度最多2m,可以分治NTT解决
1 |
|