娃娃机毒瘤qwq
题意简述:对每个\(m\in[1, r]\),求所有\(n\)个点的无向图,染成\(m\)种颜色,满足任意边两端节点颜色不同的方案数,对\(998244353\)取模。\(n\leq 8000, r\leq 10^6\)。
先对节点染色,再考虑连边情况。由此可以得到一个比较显然的dp:设\(f_{i, j}\)为实际使用了\(i\)种颜色(即每种颜色至少染了一个点),染\(j\)个点的方案数,转移时枚举新增的点数\(k\),则:
\[f_{i, j}=\sum_{k=1}^{j} f_{i-1, j - k}\cdot \binom{n-j+k}{k} \cdot 2^{(j-k)\cdot k}\]
即,从未染色的\(n-j+k\)个点中选择本次新染色的\(k\)个点,则这\(k\)个点与原来的\(j-k\)个点之间的边均可以选择连或不连。
设\(g_i=f_{i, n}\),则\(m\)种颜色(有些颜色可以不用)染色的方案数为\(ans_m=\sum_{i=1}^{m} g_i\cdot \binom{m}{i}\)。
以上是一个\(O(n^3+nr)\)的暴力做法,可以获得\(60\)分。
考虑一个长度为\(m\)的颜色序列\(t\),满足\(\sum_{i=1}^m t_i = n\)且\(\forall t_i > 0\),则满足这个颜色序列的方案数为:
\[\frac{n!\cdot 2^{\binom{n}{2}}}{\prod_{i=1}^m t_i!\cdot 2^{\binom{t_i}{2}}}\]
从中可以看出一个显然的生成函数形式(与指数生成函数类似):
设\(f(x)=\sum_{i=1}^{\infty} \frac{x^i}{i!\cdot 2^{\binom{i}{2}}}\),则\(g_i=n!\cdot 2^{\binom{n}{2}}\cdot [x^n] f^i(x)\)。
现在要求出\(i\in[1, n]\)的所有\(g_i\),暴力 \(\operatorname{ntt}\) 的复杂度是\(O(n^2\log n)\)的,难以通过。
发现我们只需要求\(f^i(x)\)的第\(n\)项系数,而如果已知\(f^u(x)\)和\(f^v(x)\),满足\(u+v=i\),我们可以直接展开多项式乘法,\(O(n)\)求出这一项。
这启发我们预处理一些\(f^u(x)\),满足任意的\(i\in[1, n]\)都可以找到预处理好的\(u+v=i\)。
很容易想到根号分治,即设\(B=\sqrt{n}\),对\(i\in[0, B]\)预处理\(f^{i}(x)\)和\(f^{i\cdot B}(x)\)。
预处理复杂度\(O(n\sqrt{n}\log n)\),求\(g\)复杂度\(O(n^2)\)。
对于\(ans_m=\sum_{i=1}^{m} g_i\cdot \binom{m}{i}\),拆分组合数得到\(ans_m=m!\sum_{i=1}^m\frac{g_i}{i!}\cdot\frac{1}{(m-i)!}\),\(\operatorname{ntt}\)一下即可,复杂度\(O(r\log r)\)。