169 words
1 minute
组合数学

P5900 无标号无根树计数 无根树计数比较困难,我们考虑fif_i表示ii个点的有根树的个数
F(x)=i=1fixiF(x)=\sum_{i=1}f_ix^i
那么,根据EulerEuler变换
F(x)=xε(F(x))F(x)=x\varepsilon(F(x))

F(x)=xε(F(x))F(x)=(xexp(j=1F(xj)j))=exp(j=1F(xj)j)+xexp(j=1F(xj)j)j=1F(xj)xj1xF(x)=F(x)+F(x)j=1F(xj)xjG(x)=j=1F(xj)xj=i=1gixiF(x)=i=1ifixi1F(xj)xj=i=1ifixj(i1)xj=i=1ifixiji=1gixi=i=1ifixijgn=dndfdxF(x)=F(x)+F(x)G(x)xF(x)=i=1ifixinfn=fn+k=1n1fkgnkfn=1n1i=1n1figni\begin{align} F(x)&=x\varepsilon(F(x))\\ F'(x)&=(x\exp(\sum_{j=1}\frac{F(x^j)}{j}))'\\ &=\exp(\sum_{j=1}\frac{F(x^j)}{j})+x\exp(\sum_{j=1}\frac{F(x^j)}{j})\sum_{j=1}F'(x^{j})x^{j-1}\\ xF'(x)&=F(x)+F(x)\sum_{j=1}F'(x^{j})x^{j}\\ G(x)&=\sum_{j=1}F'(x^{j})x^{j}=\sum_{i=1}g_ix^i\\ F'(x)&=\sum_{i=1}if_ix^{i-1}\\ F'(x^j)x^j&=\sum_{i=1}if_ix^{j(i-1)}x^j=\sum_{i=1}if_ix^{ij}\\ \sum_{i=1}g_ix^i&=\sum_{i=1}if_ix^{ij}\\ g_n&=\sum_{d\mid n}df_d\\ xF'(x)&=F(x)+F(x)G(x)\\ xF'(x)&=\sum_{i=1}if_ix^{i}\\ nf_{n}&=f_n+\sum_{k=1}^{n-1}f_kg_{n-k}\\ f_n&=\frac{1}{n-1}\sum_{i=1}^{n-1}f_ig_{n-i}\\ \end{align}

可以分治FFTFFT解决求出fif_i
考虑如何计算无根树的个数
对于奇数的nn,每颗树只有一个重心,那么把根当做重心,即为所有的无根树
fni=n+12fifnif_{n}-\sum_{i=\frac{n+1}{2}}f_if_{n-i}
对于偶数的nn,可能存在两个重心,还需减掉(fn22)\binom{f_{\frac{n}{2}}}{2}
如果两个大小为n2\frac{n}{2},同构,则只会被计算一次,如果不同构,则会被计算两次
P3784 [SDOI2017] 遗忘的集合