有无标号计数
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 ]
以上是关于有无标号计数的主要内容,如果未能解决你的问题,请参考以下文章