题解 仙人掌计数
Posted dark-romance
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 仙人掌计数相关的知识,希望对你有一定的参考价值。
题目大意
给出(q)个查询,每次查询(n)个点的仙人掌有多少个。
(qle 5 imes 10^4,nle 131072)
思路
因为这道题太难码了,所以先把题解写了再写代码(好奇怪啊)
我们设(c_n)为(n)个点时的答案,我们对其构造指数型生成函数(C(x)):
[C(x)=sum_{i=0} c_ifrac{x^i}{i!}
]
我们考虑钦定一个根,然后连边,显然要么连出去一条边,要么连出去一个环。需要注意的是,连边相当于把根与一个仙人掌相连,连环的环其实是仙人掌连成一个环。
于是,我们可以得到转移式:
[C(x)=xexp (C(x)+frac{1}{2}sum_{i=2}^{infty} C^i(x))
]
除以(2)是因为一个环无论正反都是一样,但是我们计算时却视作两种情况。
将上式用等比数列求和公式可以得到:
[C(x)=xexp(frac{2C(x)-C^2(x)}{2-2C(x)})
]
我们发现我们如果构造
[F(C(x))=xexp(frac{2C(x)-C^2(x)}{2-2C(x)})-C(x)
]
我们即是要求导(F(C(x)))的根,对此,我们可以使用多项式牛顿迭代法。我们就需要求到(F(C(x)))的导:
[F^{‘}(C(x))=(xexp(frac{2C(x)-C^2(x)}{2-2C(x)})-C(x))^{‘}
]
[=xexp (frac{2C(x)-C^2(x)}{2-2C(x)})(frac{2C(x)-C^2(x)}{2-2C(x)})^{‘}-1
]
[=xexp (frac{2C(x)-C^2(x)}{2-2C(x)})frac{C^2(x)-2C(x)+2}{2C^2(x)-4C(x)+2}-1
]
于是,我们可以得到牛顿迭代法的式子:
[C(x)=C_0(x)-frac{F(C_0(x))}{F^{‘}(C_0(x))}
]
[=C_0(x)-frac{xexp(frac{2C_0(x)-C_0^2(x)}{2-2C_0(x)})-C(x)}{xexp (frac{2C_0(x)-C_0^2(x)}{2-2C_0(x)})frac{C_0^2(x)-2C_0(x)+2}{2C_0^2(x)-4C_0(x)+2}-1}
]
[=C_0(x)-frac{2xexp (frac{2C_0(x)-C_0^2(x)}{2-2C_0(x)})-2C_0(x)}{(1+frac{1}{(C_0(x)-1)^2})xexp (frac{2C_0(x)-C_0^2(x)}{2-2C_0(x)})-2}
]
我们发现如果我们设(G=xexp (frac{2C_0(x)-C_0^2(x)}{2-2C_0(x)})),那么式子就可以化为:
[C(x)=C_0(x)-frac{2G-2C_0(x)}{(1+frac{1}{(C_0(x)-1)^2})G-2}
]
以上是关于题解 仙人掌计数的主要内容,如果未能解决你的问题,请参考以下文章