Cayley + EGF + Stirling数 + 拉格朗日反演:ICPC2025西安H

image-20261002091913163

Heart of Darkness - Problem - QOJ.ac


题目要求至少 kk 条异色边,我们转化为求恰好 0,…,k−10,\dots,k-1 条异色边,然后用总方案去减。

Cayley 公式:

  • nn 个点带标号无根树:nn−2n^{n-2}
  • nn 个点带标号有根树:nn−1n^{n-1}

我们首先枚举 ii 个黑点,然后它们组成一棵无根树,方案为:

∑i=1n(ni)ii−2\sum_{i=1}^n\binom n i i ^{i-2}

现在我们考虑在上面挂白点

EGF :

a×b→a+b(a+ba)a\times b\to a+b \binom {a+b}a

Definition : A(x)=∑n=0∞an⋅xnn!A(x)=\sum_{n=0}^\infty a_n\cdot\dfrac {x_n}{n!}

Then:

A(x)B(x)=∑i=0∞(∑i=0n(ni)aibn−i)xnn!A(x)B(x)=\sum_{i=0}^{\infty}\left(\sum_{i=0}^n\binom n ia_i b_{n-i}\right)\dfrac{x^n}{n!}

我们定义 T(y)T(y),其中 [yn]T(y)[y^n]T(y) 表示 nn 个点有根树的方案:

T(y)=∑t=1∞tt−1ytt!T(y)=\sum_{t=1}^{\infty}t^{t-1}\frac {y^t}{t!}

我们假设枚举有 zz 条异色边,那样子就有 zz 棵树。

现在我们先求在一个黑点上挂 zz 棵树,它贡献到生成函数 [xz][x^z] 处:

∑z=0∞Tz(y)⋅xzz!=exT(y)\sum_{z=0}^\infty \frac{T^z(y)\cdot x^z}{z!}=e^{xT(y)}

之所以要除 z!z!,是因为树之间没有差别。根据泰勒展开,上式为 exT(y)e^{xT(y)}

而我们现在有 ii 黑点,因此方案为:(exT(y))i(e^{xT(y)})^i,重新展开得到:

∑z=0∞Tz(y)iz⋅xzz!\sum_{z=0}^\infty \frac{T^z(y)i^z\cdot x^z}{z!}

现在我们本质上其实就是求这个东西:

∑j=0k−1∑i=1n(ni)ii−2(n−i)![xjyn−i]∑z=0∞Tz(y)iz⋅xzz!\sum_{j=0}^{k-1}\sum_{i=1}^n\binom n i i ^{i-2}(n-i)![x^jy^{n-i}]\sum_{z=0}^\infty \frac{T^z(y)i^z\cdot x^z}{z!}

  • jj 枚举的是总共 jj 条异色边
  • 之所以乘 (n−i)!(n-i)!,是因为我们EGF要还原系数
  • 前面 ii 个黑点,所以我们需要 n−in-i 个白点,因此 yy 的次数为 n−in-i

变形一下:

∑j=0k−1[yn−i]ijTj(y)j!∑i=1n(ni)(n−i)!ii−2\sum_{j=0}^{k-1}[y^{n-i}]\dfrac{i^jT^j(y)}{j!}\sum_{i=1}^n\binom n i (n-i)!i^{i-2}

显然,我们可以对黑点也用 [yi][y^i] 表示,那样子我们就可以直接在最外面提取 [yn][y^n] 了:

n![yn]∑j=0k−1Tj(y)j!∑i=1nii+j−2i!yin![y^n]\sum_{j=0}^{k-1}\dfrac{T^j(y)}{j!}\sum_{i=1}^n\frac{i^{i+j-2}}{i!}y^i


接下来我们来看看 T(y)T(y) 的另一种表示方式,注意 T(y)T(y) 是生成函数。显然 T(y)T(y) 肯定要有一个根节点,而下面可以连任意多个子树,因此有:

T(y)=y∑i=0∞Ti(y)i!=yeT(y)T(y)=y\sum_{i=0}^{\infty}\frac{T^i(y)}{i!}=ye^{T(y)}

我们现在有一个关于 T(y)T(y) 的函数:T(y)=yeT(y)T(y)=ye^{T(y)}

拉格朗日反演:

假设已知 y=f(x)y=f(x),我们现在想求其反函数 x=g(y)x=g(y) 的泰勒展开。

对于 y=f(x)y=f(x),我们必然可以写成:y=xϕ(x)y=\dfrac x {\phi(x)},这个时候我们有:

[yn]g(y)=1n[xn−1]ϕn(x)[y^n]g(y)=\frac 1 n[x^{n-1}]\phi^n(x)

另类拉格朗日反演:

如果我们要求的是复合函数,我们有:

[yn]F(T(y))=[xn]F(x)ϕn(x)(1−xϕ′(x)ϕ(x))[y^n]F(T(y))=[x^n]F(x)\phi^n(x)\left(1-x\frac{\phi'(x)}{\phi(x)}\right)

我们现在回过来看:T(y)=yeT(y)T(y)=ye^{T(y)},我们令 x=T(y)x=T(y),则 y=xe−xy=xe^{-x}

根据定义有 ϕ(x)=ex\phi(x)=e^x,因此 ϕn(x)=enx\phi^n(x)=e^{nx},ϕ′(x)=ex\phi'(x)=e^x

我们回到我们最开始想求的式子,我们直接让包括 T(y)T(y) 的这一大坨为 :

F(T(y))=∑j=0k−1Tj(y)j!∑i=1nii+j−2i!yiF(T(y))=\sum_{j=0}^{k-1}\dfrac{T^j(y)}{j!}\sum_{i=1}^n\frac{i^{i+j-2}}{i!}y^i

而我们现在恰恰就是要求 [yn]F(T(y))[y^n]F(T(y)),直接套公式:

n![yn]F(T(y))=n![xn]enx(1−x)∑j=0k−1xjj!∑i=1nii−2+ji!(xe−x)in![y^n]F(T(y))=n![x^n]e^{nx}(1-x)\sum_{j=0}^{k-1}\frac{x^j}{j!}\sum_{i=1}^n \frac{i^{i-2+j}}{i!}(xe^{-x})^i

令 A(x)=∑j=0k−1xjj!∑i=1nii−2+ji!(xe−x)iA(x)=\sum_{j=0}^{k-1}\frac{x^j}{j!}\sum_{i=1}^n \frac{i^{i-2+j}}{i!}(xe^{-x})^i ,令 A(x)A(x) 的系数 am=[xm]A(x)a_m=[x^m]A(x)

在 mm 固定的,显然我们可以知道我们要取 e−xie^{-xi} 的哪一项,先泰勒展开:

e−xi=∑l=0∞(−i)lxll!e^{-xi}=\sum_{l=0}^{\infty}\frac{(-i)^lx^l}{l!}

显然 l=m−i−jl=m-i-j,原式变为:

am=∑j=0k−11j!∑i=1nii−2+ji!⋅(−i)m−i−j(m−i−j)!a_m=\sum_{j=0}^{k-1}\frac 1 {j!}\sum_{i=1}^n\frac{i^{i-2+j}}{i!}\cdot\frac{(-i)^{m-i-j}}{(m-i-j)!}

进一步化简和变形,得到:

am=∑j=0k−11j!⋅1(m−j)!∑i=1m−j(−1)m−j−i(m−ji)im−2a_m=\sum_{j=0}^{k-1}\frac 1{j!}\cdot\frac 1{(m-j)!}\sum_{i=1}^{m-j}(-1)^{m-j-i}\binom {m-j} i i^{m-2}

第二类Stirling数:

{nk}=1k!∑i=0k(−1)k−i(ki)in\begin{Bmatrix} n \\ k \end{Bmatrix} = \frac 1 {k!}\sum_{i=0}^k(-1)^{k-i}\binom k i i^n

因此上式可以直接变为:

am=∑j=0k−11j!{m−2m−j}a_m=\sum_{j=0}^{k-1}\frac 1{j!}\begin{Bmatrix}m-2 \\ m-j\end{Bmatrix}

第二类Stirling数的性质:

对于 {m−2m−j}\begin{Bmatrix}m-2 \\ m-j\end{Bmatrix} ,当 jj 固定时,这是一个关于 mm 的不超过 2j2j 次的多项式

因此多个斯特林数求和,得到的 A(x)A(x) 也是一个关于 mm,次数不超过 2(k−1)2(k-1) 的多项式。

若 A(x)A(x) 为 dd 次多项式,则其OGF的分母为 (1−x)d+1(1-x)^{d+1}

因此我们可以表示为:

A(x)=P(x)(1−x)2k−1A(x)=\frac{P(x)}{(1-x)^{2k-1}}

其中 P(x)P(x) 是 O(k)O(k) 级别的,我们要求的最终式子变为:

n![xn]enxP(x)(1−x)2k−2n![x^n]\frac{e^{nx}P(x)}{(1-x)^{2k-2}}

我们考虑 P(x)P(x) 的计算:

P(x)=A(x)(1−x)2k−1P(x)=A(x)(1-x)^{2k-1}

而 P(x)P(x) 是 O(k)O(k) 级别的,所以我们可以用 O(k2)O(k^2) 算出 A(x)A(x) 的前 kk 项,然后和 (1−x)2k−1(1-x)^{2k-1} 卷积即可。

{nk}=k{n−1k}+{n−1k−1}\begin{Bmatrix} n \\ k \end{Bmatrix}=k\begin{Bmatrix} n-1 \\ k \end{Bmatrix}+\begin{Bmatrix} n-1 \\ k-1 \end{Bmatrix}

第二类Stirling数我们可以递推预处理,因此 ama_m 我们就可以 O(k)O(k) 求出来了。

现在,我们就暴力枚举 P(x)P(x) 中的每一项 pip_i:

n!∑i=02kpi[xn−i]enx(1−x)2k−2n!\sum_{i=0}^{2k}p_i[x^{n-i}]\frac{e^{nx}}{(1-x)^{2k-2}}

我们看后面这个,我们令其系数为 cmc_m,我们现在想快速求 cn−ic_{n-i},令:

C(x)=∑m=0∞cmxm=enx(1−x)rC(x)=\sum_{m=0}^{\infty}c_m x^m=\frac {e^{nx}}{(1-x)^r}

求导:

C′(x)=∑m=1∞cmmxm−1=nxenx(1−x)r−enxr(1−x)r−1(−1)(1−x)2r=enx(1−x)r⋅n(1−x)+r1−x=n+r−nx1−xC(x)\begin{align*} C'(x)&=\sum_{m=1}^{\infty}c_{m}mx^{m-1}\\[11px] &=\frac{nxe^{nx}(1-x)^r-e^{nx}r(1-x)^{r-1}(-1)}{(1-x)^{2r}}\\[9px] &=\frac{e^{nx}}{(1-x)^r}\cdot\frac{n(1-x)+r}{1-x}\\[9px] &=\frac{n+r-nx}{1-x}C(x) \end{align*}

因此有:

(1−x)C′(x)=(n+r−nx)C(x)(1-x)C'(x)=(n+r-nx)C(x)

左式:

(1−x)∑m=1∞cmmxm−1=∑m=1∞cmmxm−1−∑m=1∞cmmxm(1-x)\sum_{m=1}^{\infty}c_{m}mx^{m-1}=\sum_{m=1}^{\infty}c_{m}mx^{m-1}-\sum_{m=1}^{\infty}c_{m}mx^{m}

右式:

(n+r)∑m=0∞cmxm−n∑m=0∞cmxm+1(n+r)\sum_{m=0}^{\infty}c_m x^m-n\sum_{m=0}^{\infty}c_m x^{m+1}

我们提取 xm−1x^{m-1} 的系数:

mcm−(m−1)cm−1=(n+r)cm−1−ncm−2mc_m-(m-1)c_{m-1}=(n+r)c_{m-1}-nc_{m-2}

变形得到:

cm=n+r+m−1mcm−1−nmcm−2c_m=\frac{n+r+m-1}{m}c_{m-1}-\frac n m c_{m-2}

因此我们就可以用 O(n)O(n) 的时间把 cmc_m 递推出来了

总时间复杂度 O(k2+n)O(k^2+n)