洛谷P6516 [QkOI#R1] Quark and Graph

题意

洛谷

做法

(a_i)表示距离(1)最短路为(i)的点个数,令(D=max{i|a_i eq 0})
由于题目保证至少存在一种解,所以(a_0,cdots,a_D)均不等于(0)
分成相邻层之间的边,与层内部的边,生成函数显然为:

[prodlimits_{i=0}^{D-1} ((x+1)^{a_i}-1)^{a_{i+1}}cdot prodlimits_{i=0}^D(x+1)^{a_i*(a_i-1)/2} ]

我们的重点放在第一部分
这里由于(sumlimits_{i=0}^{D-1}a_icdot a_{i+1}le 2 imes 10^5),可以直接做到(O(Llog^2L))(其中(L=sumlimits_{i=0}^{D-1}a_icdot a_{i+1})
但到这一步就不做了,未免这题显得太sb了,我们继续做下去

(F(x)=prodlimits_{i=0}^{D-1} ((x+1)^{a_i}-1)^{a_{i+1}}= ext{exp}(sumlimits_{i=0}^{D-1}a_{i+1} ext{ln}((x+1)^{a_i}-1)))

这里( ext{ln})括号内的常数项不为(1),比较不好搞
我们转换一下:
(G(x)=F(x-1)=(-1)^{sumlimits_{i=1}^D a_i} ext{exp}(sumlimits_{i=0}^{D-1}a_{i+1} ext{ln}(1-x^{a_i}))=(-1)^{sumlimits_{i=1}^D a_i} ext{exp}(sumlimits_{i=0}^{D-1}a_{i+1}sumlimits_{k=1}^{infty} frac{x^{ka_i}}{k})))

由于(a_ile n)( ext{exp})括号内的这部分可以(O(nlogn))手动展开,然后求个exp

之后(F(x)=G(x+1))是个比较套路的东西

细节:由于我们需要通过(G(x))还原出(F(x))来,故需要得到(G(x)~mod~x^{L+1})(我本来写的(mod~x^{m+1}),WA到自闭)

时间复杂度(O(mlogm+LlogL)),由于要求exp的缘故,可能跑不过(O(mlogm+Llog^2L))

原文地址:https://www.cnblogs.com/Grice/p/14251603.html