NTT+生成函数+多项式求逆
Link
Description
刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.
刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或间接的连通. 为了省钱, 每两个城市之间最多只能有一条直接的贸易路径. 对于两个建立路线的方案, 如果存在一个城市对, 在两个方案中是否建立路线不一样, 那么这两个方案就是不同的, 否则就是相同的. 现在你需要求出一共有多少不同的方案.
好了, 这就是困扰阿狸的问题. 换句话说, 你需要求出n个点的简单(无重边无自环)无向连通图数目.
由于这个数字可能非常大, 你只需要输出方案数mod 1004535809(479 * 2 ^ 21 + 1)即可.
Samples
Input #1
1 | 3 |
Output #1
1 | 4 |
Solution
约定:这里$\Gamma$表示阶乘函数,即$\Gamma(x) = x!$
首先我们设$f_i$为$i$个点的简单无向连通图数目,$g_i$为$i$个点的无向图数目.
首先我们可以得到$g_n = 2^{\binom {n}{2}}$, 因为图上至多有$\binom {n}{2}$条边,每一条边分别有选和不选两种情况.
然后我们考虑把$f$和$g$联系起来,考虑枚举1号点所在的连通块的大小,可得:
$$g_n = \sum_{i=1}^n \binom {n-1}{i-1} f_ig_{n-i}$$
把组合数按照定义式展开:
$$g_n = \Gamma(n-1) \sum_{i=1}^n \frac{f_i}{\Gamma(i-1)} \times \frac{g_{n-i}}{\Gamma(n-i)}$$
两边同时除以$\Gamma(n-1)$可得:
$$\frac {g_n}{\Gamma(n-1)} = \sum_{i=1}^n \frac{f_i}{\Gamma(i-1)} \times \frac{g_{n-i}}{\Gamma(n-i)}$$
显然等式右面是一个卷积形式,考虑用指数型生成函数$\rm EGF$表示一下:
$$F(x) = \sum_{i=1}^{\infty} g_n \frac{x^i}{(i-1)!}$$
$$G(x) = \sum_{i=0}^{\infty} g_n \frac{x^i}{i!}$$
$$H(x) = \sum_{i=1}^{\infty} f_i \frac{x^i}{(i-1)!}$$
根据上面的式子$F = G \times H$,即$H = \frac{F}{G}$, 那么多项式求逆即可.
Code
1 | /* Headers */ |
还有,以后的题解格式将会依照这篇文章的格式/cy