P5900 无标号无根树计数
无根树计数比较困难,我们考虑fi表示i个点的有根树的个数
F(x)=∑i=1fixi
那么,根据Euler变换
F(x)=xε(F(x))
F(x)F′(x)xF′(x)G(x)F′(x)F′(xj)xji=1∑gixignxF′(x)xF′(x)nfnfn=xε(F(x))=(xexp(j=1∑jF(xj)))′=exp(j=1∑jF(xj))+xexp(j=1∑jF(xj))j=1∑F′(xj)xj−1=F(x)+F(x)j=1∑F′(xj)xj=j=1∑F′(xj)xj=i=1∑gixi=i=1∑ifixi−1=i=1∑ifixj(i−1)xj=i=1∑ifixij=i=1∑ifixij=d∣n∑dfd=F(x)+F(x)G(x)=i=1∑ifixi=fn+k=1∑n−1fkgn−k=n−11i=1∑n−1fign−i
可以分治FFT解决求出fi
考虑如何计算无根树的个数
对于奇数的n,每颗树只有一个重心,那么把根当做重心,即为所有的无根树
fn−∑i=2n+1fifn−i
对于偶数的n,可能存在两个重心,还需减掉(2f2n)
如果两个大小为2n,同构,则只会被计算一次,如果不同构,则会被计算两次
P3784 [SDOI2017] 遗忘的集合
E:
所求为每行每列至少有1个
若没有列的限制,要求每行非空,由容斥原理知:
S=∑i=0N(−1)N−i(iN)Ai,Ai=(Ki×M)
对至少有i行非空进行容斥
考虑列的限制,即为:
S=∑i=0N∑j=0M(−1)N−i(−1)M−j(iN)(jM)(Kij)
考虑生成函数:
F(x)=∑i=0N∑j=0M(−1)N−i(iN)(−1)M−j(jM)(1+x)ij
则S=[xK]F(x)
F(x)=i=0∑N(−1)N−i(iN)j=0∑M(−1)M−j(jM)((1+x)i)j=i=0∑N(−1)N−i(iN)((1+x)i−1)M
我们有(ex−1)n=n!∑i=N{Ni}i!xi
令t=ln(1+x)
F(x)=i=0∑N(−1)N−i(iN)(eit−1)M=i=0∑N(−1)N−i(iN)j=0∑M(−1)M−j(jM)eijt=y=0∑y!tyi=0∑N(−1)N−iiy(iN)j=0∑M(−1)M−jjy(jM)=y=0∑y!ln(1+x)yN!{Ny}M!{My}
由y!ln(1+x)y=∑n=y[yn]n!xn
[xK]=∑y=max(N,M)KM!N!{Ny}{Ny}[yK]