题意
做法
令(a_i)表示距离(1)最短路为(i)的点个数,令(D=max{i|a_i
eq 0})
由于题目保证至少存在一种解,所以(a_0,cdots,a_D)均不等于(0)
分成相邻层之间的边,与层内部的边,生成函数显然为:
我们的重点放在第一部分
这里由于(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))