洛谷P6516 [QkOI#R1] Quark and Graph

题意

洛谷

做法

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

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

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

\(F(x)=\prod\limits_{i=0}^{D-1} ((x+1)^{a_i}-1)^{a_{i+1}}=\text{exp}(\sum\limits_{i=0}^{D-1}a_{i+1}\text{ln}((x+1)^{a_i}-1))\)

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

由于\(a_i\le n\)\(\text{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)\)

posted @ 2021-01-08 15:27  Grice  阅读(115)  评论(0编辑  收藏  举报