关于本题的各种做法...
第一步
首先,如果一个大小为 ai 的连通块连出了 di 条边,那么这 di 条边在连通块内部的出发点就总共有 aidi 种组合,即,这会对答案产生 aidi 的贡献。于是,对于一种所有点的度数分别为 d1,⋯,dn 的情况,它们对答案的贡献就是 ∏iaididim(∑idim)。
考虑使图的生成树和 Prufer 序列一一对应。对于一个度数为 di 的连通块(以下简称 “ 点 ”)i,其在 Prufer 序列中会出现 di−1 次。我们现在尝试把一个个点填入 Prufer 序列。
设 fi,j 表示当前已经把前 i 个点填入了 Prufer 序列,占了 j 个位置的 ∏iaididim 总和,gi,j 表示对应情况下的 ∏iaididim(∑idim) 总和。枚举第 i 个点占了多少个位置,容易得出:
fi,j=k≤j∑fi−1,k(kj)aij−k+1(j−k+1)m
gi,j=k≤j∑gi−1,k(kj)aij−k+1(j−k+1)m+k≤j∑fi−1,k(kj)aij−k+1(j−k+1)2m
得到一个 O(n3) 的暴力。
以后的讨论都以此为基础。
第二步
发现 fi,j 可以卷积地转移。
使用指数生成函数,记 Fi(x)=∑jj!fi,jxj,Gi(x) 类似,我们把上述转移改写成如下形式:
Fi(x)=Fi−1(x)∗Pi(x)
Gi(x)=Gi−1(x)∗Pi(x)+Fi−1(x)∗Qi(x)
(虽然相当不严谨,若无特殊需要这里不再区分多项式 F(x) 和 F。)
其中
Pi(x)=j∑j!aij+1(j+1)mxj
Qi(x)=j∑j!aij+1(j+1)2mxj
(Pi 和 Qi 长得这么像?)
进一步地,可以用矩阵改写成如下形式
(PiQi0Pi)∗(Fi−1Gi−1)=(FiGi)
于是只要求 ∏i(PiQi0Pi) 即可。
再化 Pi,有
Pi(x)=j∑j!aij+1(j+1)mxj=j∑j!aij+1xjk≤m∑{mk}(kj+1)k!=k≤m∑{mk}k!j∑(j+1−k)!aij+1(j+1)xj
前面的先不管,看到后面的和式有点像 exp 的形式。具体地,若它真的有一个类似形式的话,(j+1) 意味着可能需要求导,下面的阶乘平移了 k 意味着需要多项式平移,而上面的 aij+1 意味着有类似 eaix 的式子出现。
综合上面几点不难得出后面和式就是
(aikxkeaix)′=aikxk−1(k+aix)eaix
继续化
Pi(x)=k≤m∑{mk}k!aikxk−1(k+aix)eaix=eaixk≤m∑{m+1k+1}aik+1xk
最后一步用到了 {mk}=k{m−1k}+{m−1k−1}。对 Qi 的推导同理。
再记 Ai(x)=∑k≤m{m+1k+1}aik+1xk,Bi(x)=∑k≤2m{2m+1k+1}aik+1xk。
注意到 Ai,Bi 都是次数小于等于 2m 的多项式。
回头看原来的矩阵乘积,把所有 exp 提出来,得到所求的式子为
eSxi∏(AiBi0Ai)
FFT 分治。复杂度 O(nmlog2n)(精细的实现可以有 O(nmlognlogm)?)。
注意的是,直接做矩阵乘法的常数显然巨大,但这个矩阵的特殊形式有
(AiBi0Ai)(AjBj0Aj)=(AiAjBiAj+AiBj0AiAj)
前后形式相同,可以很方便地转移。可以通过本题。
继续优化?
第三步
上面的小优化可以推广。可以归纳地证明所有这些矩阵乘起来后左下角多项式为
i∑Bij=i∏Aj=i∏Ai(j∑Bj∗Aj−1)
设 {aj} 幂和的生成函数 T(x)=∑i(∑jaji)xi。
注意到 Ai(x) 的形式都很接近。设 A(x)=∑k≤m{m+1k+1}xk,那么 Ai(x)=aiA(aix)。 Bi(x) 同理。
然后
j∑Bj∗Aj−1=j∑B(ajx)∗A(ajx)−1=j∑(B∗A−1)(ajx)=T⋅(B∗A−1)
这里 ⋅ 是点乘,即对应位置相乘。
继续
i∏Ai=expi∑lnAi=expi∑lnaiA(aix)=exp(T⋅lnA)
如果求出 T 的话,这两个式子都可以快速求解。求 T 是一个经典问题,有
T(x)=i∑(j∑aji)xi=j∑i∑(ajx)i=j∑1−ajx1=∏i(1−aix)∑i∏j=i(1−ajx)
FFT 分治解决,复杂度 O(nlog2n),这里不再赘述。
最后放出原问题完整的求解式(似乎两个 exp 可以合并?):
Ans=(n−2)![xn−2]exp(Sx)∗(T⋅(B∗A−1))∗exp(T⋅lnA)
于是最终我们在 O(nlog2n) 的时间内解决了问题。
因为是多项式题,本蒟蒻代码较长而且码风奇丑,就不放代码了。