有无标号计数

Posted zhongzero

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有无标号计数相关的知识,希望对你有一定的参考价值。

有标号有根树

(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)个形态选多少个
[ egin{split} [x^{n}]F(x)& =[x^{n}]xprod_{k>0}(sum_{i geq 0}x^{ik})^{f_k}\& =[x^{n}]xprod_{k>0}(frac{1}{1-x^k})^{f_k}\& =[x^{n}]xprod_{k>0}({1-x^k})^{-f_k}\& end{split} ]
([x^{n}])去掉
[ F(x)=xprod_{k>0}(1-x^k)^{-f_k} ]
两边取(ln)
[ egin{split} lnF(x)& =ln(xprod_{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_isum_{k>0}f_kk([x^{n-i}] frac{x^k}{1-x^k}) ]
又由(frac{x^k}{1-x^k}=sum_{i=1}x^{ik})


[ egin{split} nf_n & =f_n+sum_{i>0}f_isum_{k>0}f_kk[k|n-i]\& =f_n+sum_{i>0}f_isum_{k|n-i}f_kk end{split} ]

[ f_n=frac{sum_{i=1}^{n-1}f_isum_{k|n-i}f_kk}{n-1} ]

这样直接算(O(n^2))的,可以分治(NTT)做到((Onlog^2n))

无标号无根树

我们发现树只有1/2个重心,我们可以钦定这棵无根树的根为它的重心

1.(n)为奇数。那么只有一个重心,若根不是重心, 那么其一定有恰好一颗子树,其大小超过(lfloor) (frac{n}{2}) ( floor), 枚举这个子树的大小并且扣去:
[ h_n=f_n-sum_{k= lfloor frac{n}{2} floor+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 ]

以上是关于有无标号计数的主要内容,如果未能解决你的问题,请参考以下文章

斯特林数

有标号的DAG计数I~IV

有标号的DAG计数 II

无标号树的计数原理(组合计数,背包问题,隔板法,树的重心)

有标号的DAG计数I~IV

有标号的DAG计数 III