NOI22联考 sdsz 数数 / NOI25联考 sdsz 基环
设原图有 \(k\) 个连通块,大小分别为 \(s_1, s_2, \dots, s_k\)。
先考虑原图已经存在一个环怎么做,发现答案直接就是 \(\left(\prod\limits_{i=1}^{k}s_i\right)\cdot n^{k-2}\)(可能需要特判掉 \(k=1\))。
扩展 \(Caylay\) 公式
考虑 \(pr\ddot{u}fer\) 序列,其还原出的点 \(u\) 度数为序列上 \(u\) 的出现次数 \(+1\)。我们知道当每个连通块度数都确定时,方案数为 \(\prod\limits_{i=1}^ks_i^{deg_i}\)。
考虑先给每个连通块 \(\prod\limits_{i=1}^{k}s_i\) 的贡献,第 \(i\) 位有 \(k\) 种选择,第 \(j\) 个选择的贡献是 \(s_j\),第 \(i\) 位总贡献即 \(n\)。各位独立,故把若干个连通块连成树的方案数即 \(\left(\prod\limits_{i=1}^{k}s_i\right)\cdot n^{k-2}\)。
对于原图不存在环的情况,先特判掉 \(k=1\),然后考虑先连若干条边构成使图中出现一个环,然后化为上面的情况。
新环有两种可能,只经过原来的一个连通块或者经过多个。
对于只经过原来一个连通块的情况,对每一个连通块 \(i\),计算连边方案数(\(\frac{s_i(s_i-1)}{2}-|E_i|\),\(|E_i|\) 为连通块内原图中边的数量),再乘以 \(\left(\prod\limits_{i=1}^{k}s_i\right)\cdot n^{k-2}\),因此这种情况共对答案产生的贡献为
对于环经过原来多个连通块的情况,假设经过了 \(p_1,p_2,\dots,p_c\)(无序),则发现答案变为
发现 \(\frac{c!}{2c}\cdot\left(\prod\limits_{i=1}^{k}s_i\right)\cdot n^{k-c-1}\) 只与 \(c\) 有关,所以考虑把前面的项乘以连边方案数(使用乘法原理不难发现为 \(\prod\limits_{i=1}^cs_{p_i}^2\))后用dp计算。
记
则
转移需要记一个 \(g\),表示
稍微拆一下,就会发现转移为
现在已经能处理绝大多数情况了,但是发现 \(c=2\) 和 \(c=k\) 的情况还是不对,分讨一下:
-
\(c=2\) 在连边方案中减掉重边方案数 \(s_i\cdot s_j\),即将 \(f_{n,2}\) 减去 \(\sum\limits_{i<j}s_is_j\cdot\frac{s_i+s_j}{s_is_j}=\sum\limits_{i<j}(s_i+s_j)=n(k-1)\),贡献到答案即可。
-
\(c=k\) 发现贡献变为 \(\prod\limits_{i=1}^ks_i^2\cdot\frac{k!}{2k}\),预处理这个式子(也可以记一个 \(h_{i,j}\) 然后dp),贡献到答案即可。
-
\(c=k=2\) 发现贡献变为 \(\left(\prod\limits_{i=1}^ks_i^2-\prod\limits_{i=1}^ks_i\right)\cdot\frac{k!}{2k}\),将 \((h_{k,k}-g_{k,k})\cdot\frac{k!}{2k}\) 贡献到答案即可
把上述两种情况贡献加起来,特殊处理一下边界就行了。
关于优化,可以写出 \(f_{i,j},g_{i,j}\) 的生成函数 \(F_i(x),G_i(x)\),转移写成多项式是简单的,用矩阵维护多项式,转移矩阵内部是短多项式,分治ntt即可

浙公网安备 33010602011771号