有无标号计数

有标号有根树

\(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 \]

猜你喜欢

转载自www.cnblogs.com/zhongzero/p/11788475.html