有标号有根树
\(n^{n-1}\)
有标号无根树
\(n^{n-2}\)
标号为\(i\)的点度数为\(a_i\)的无根树
\(\frac{(n-2)!}{\prod(a_i-1)!}\)
无标号有根树
设\(f_n\)表示n个点的无标号有根树数量 ,\(f\)的生成函数为\(F(x)\)
我们考虑去除根节点的各个子树,可以分成若干个子问题,枚举大小为\(k\)的子树有多少个,再枚举大小为\(k\)的子树的\(f_k\)个形态选多少个
\[
\begin{split}
[x^{n}]F(x)&
=[x^{n}]x\prod_{k>0}(\sum_{i \geq 0}x^{ik})^{f_k}\\&
=[x^{n}]x\prod_{k>0}(\frac{1}{1-x^k})^{f_k}\\&
=[x^{n}]x\prod_{k>0}({1-x^k})^{-f_k}\\&
\end{split}
\]
将\([x^{n}]\)去掉
\[
F(x)=x\prod_{k>0}(1-x^k)^{-f_k}
\]
两边取\(ln\)
\[
\begin{split}
lnF(x)&
=ln(x\prod_{k>0}(1-x^k)^{-f_k})\\&
=ln(x)+\sum_{k>0}ln((1-x^k)^{-f_k})\\&
=ln(x)-\sum_{k>0}f_kln((1-x^k))\\&
\end{split}
\]
两边同时求导
\[
\frac{F'(x)}{F(x)}=\frac{1}{x}+\sum_{k>0}f_k \frac{kx^{k-1}}{1-x^k}
\]
化简
\[
xF'(x)=F(x)+F(x)\sum_{k>0}f_kk \frac{x^k}{1-x^k}
\]
比较第n项系数
\[
nf_n=f_n+\sum_{i>0}f_i\sum_{k>0}f_kk([x^{n-i}] \frac{x^k}{1-x^k})
\]
又由\(\frac{x^k}{1-x^k}=\sum_{i=1}x^{ik}\)
则
\[
\begin{split}
nf_n &
=f_n+\sum_{i>0}f_i\sum_{k>0}f_kk[k|n-i]\\&
=f_n+\sum_{i>0}f_i\sum_{k|n-i}f_kk
\end{split}
\]
\[
f_n=\frac{\sum_{i=1}^{n-1}f_i\sum_{k|n-i}f_kk}{n-1}
\]
这样直接算\(O(n^2)\)的,可以分治\(NTT\)做到\((Onlog^2n)\)
无标号无根树
我们发现树只有1/2个重心,我们可以钦定这棵无根树的根为它的重心
1.\(n\)为奇数。那么只有一个重心,若根不是重心, 那么其一定有恰好一颗子树,其大小超过\(\lfloor\) \(\frac{n}{2}\) \(\rfloor\), 枚举这个子树的大小并且扣去:
\[
h_n=f_n-\sum_{k= \lfloor \frac{n}{2} \rfloor+1}^{n-1}f_k f_{n-k}
\]
2.\(n\)为偶数。此时可能有两个重心,若根不是重心/是唯一一个重心,按照上式算即可,但若根是两个重心之一,会重复计算,要减去
\[
h_n=f_n-(\sum_{k=\frac{n}{2}+1}^{n-1}f_k f_{n-k})-C_{f_\frac{n}{2}}^{2}
\]
有标号无向图
\(2^{C_n^2}\)
所有点度数都是偶数的有标号无向图
\(2^{C_{n-1}^2}\)
有标号无向连通图
设\(F\)表示有标号无向连通图的\(EGF\),\(G\)表示有标号无向图的\(EGF\),则
\[
G=e^F
\]
\[
F=lnG
\]
原文地址:https://www.cnblogs.com/zhongzero/p/11788475.html