题解
首先考虑算出不限制异色节点之间连边的方案数,再减去异色边小于
k 的树的个数。
先考虑计算异色边数
恰好为
k 的情况,枚举黑点的数量
i,可以得到其为
∑i=1n(in)ii−2(n−i))i
其中形式元
x 计量异色边数,
y 计量白点数,
T(y) 是有标号有根树数量的 EGF。
那么异色边小于
k 的树的个数就是
Sk=n![yn]∑j=0k−1j!T(y)j∑i=1∞i!ii−2+jyi
由此也容易得到
k→∞ 时
Sk(即不限制异色边数的答案)为
n![yn]∑i=1∞i!ii−2(yeT(y))i=n![yn]∑i=1∞i!ii−2T(y)i
然后使用另类 Lagrange 反演处理
Sk:
Sk=n![xn]enx(1−x)∑j=0k−1j!xj∑i=1∞i!ii−2+j(xe−x)i
设
am 为红色部分的
[xm] 项系数,则对于
m≤k 时,
am 显然是
mm−2/m!,下面就只讨论
m>k 的情况:
am=j=0∑k−1j!1i=1∑m−ji!ii−2+j[xm−j](xe−x)i=j=0∑k−1j!1i=1∑m−ji!im−2×(m−j−i)!(−1)m−j−i=j=0∑k−1j!1{m−2m−j}
根据 Stirling 多项式的性质(
P8561)可知,
am 是关于
m 不超过
2(k−1) 次的多项式,也就是说其 GF 是一个分母为
(1−x)2k−1 的有理分式。所以在计算出
ak 的前
(2k−1) 项之后,就可以用一次卷积快速求出其 GF。
现在就有:
Sk=n2k−1enxP(x)
其中
P(x) 是一个
Θ(k) 次多项式(可能比分母高
2 次以内),此时可以直接以
Θ(n) 的时间复杂度计算
Sk。
具体地,简单求导可以得到
enx/(1−x)2k−1 系数的整式递推式,这样就容易处理了。
总时间复杂度
Θ(n+k2)。做到这个复杂度需要线性筛出
f(i)=ii 的函数值,但时间常数较大,朴素地使用快速幂也是可以通过的。
后话
此题得到
Θ(n+k2) 的复杂度做法后,总觉得不够优美,就试图找出更优的做法。可惜一直没有结果。
目前可以得到此问题的一些转化,如:
am=(k−1)!1∑i=0k−3ki{m−i−3m−k}
(k−1)!am+k=m!1∑j=0m(jm)(−1)m−jm+k−j(k+m)k−2jm−jm+k−2
但这两个转化看起来都不是很有用... 该怎么办呢?