指数型生成函数:贝尔数无向连通图计数弱连通DAG计数

Posted hans774882968

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指数型生成函数:贝尔数无向连通图计数弱连通DAG计数相关的知识,希望对你有一定的参考价值。

贝尔数:n个元素的集合的划分的个数

注意到S2的定义就是n个元素放入k个无区别的盒子的个数,“集合”是一种无区别的盒子,所以贝尔数等于一行S2的和。

定义dp[n]为所求,则考虑1号元素所在集合的元素个数:
d p [ n ] = ∑ i = 1 n d p [ n − i ] ∗ C n − 1 i − 1 = ∑ i = 0 n − 1 d p [ n − 1 − i ] ∗ C n − 1 i , d p [ 0 ] = 1 dp[n]=\\sum_{i=1}^ndp[n-i]*C_{n-1}^{i-1}=\\sum_{i=0}^{n-1}dp[n-1-i]*C_{n-1}^i,dp[0]=1 dp[n]=i=1ndp[ni]Cn1i1=i=0n1dp[n1i]Cn1i,dp[0]=1
把另一个数组看成全1,则这个式子和引出指数型生成函数(下称EGF)的关键式子(下称①式)
h n = ∑ i = 0 n C n i ∗ f i ∗ g n − i h_n=\\sum_{i=0}^nC_n^i*f_i*g_{n-i} hn=i=0nCnifigni
很像,即W(x)e^x有关。w[n]=h[n-1],h对应EGFW(x)*e^x。考虑一条性质:
∫ F ( x ) d x = C + ∑ i > = 1 f i − 1 i ! ∗ x i \\int F(x) dx=C+\\sum_{i>=1}\\frac{f_{i-1}}{i!}*x^i F(x)dx=C+i>=1i!fi1xi
那么为了让h[n-1]移动到x^n的位置,我们需要对h对应的函数积分1次。又dp[0]=1,故
W ( x ) = 1 + ∫ W ( x ) ∗ e x d x W(x)=1+\\int W(x)*e^xdx W(x)=1+W(x)exdx
求个导得到
l n W ( x ) = e x + C lnW(x)=e^x+C lnW(x)=ex+C
上面省略了纯微积分问题的推倒过程,因为过于显然过程只需要用到一个结论:
[ l n F ( x ) ] ′ = F ′ ( x ) F ( x ) [lnF(x)]'=\\frac{F'(x)}{F(x)} [lnF(x)]=F(x)F(x)
W(0)=dp[0]=1C=-1

无向连通图计数

注:洛谷上题目:城市规划

g[n]为所求。发现直接求没思路,所以考虑求“至少2个连通块”的,再做差。如何构造至少2个连通块?我们发现1号点,必然处于某个连通块里,所以不妨枚举1号点所在的连通块的大小i=1~n-1
g [ n ] = 2 C ( n , 2 ) − ∑ i = 1 n − 1 C n − 1 i − 1 ∗ g [ i ] ∗ 2 C ( n − i , 2 ) g[n]=2^{C(n,2)}-\\sum_{i=1}^{n-1}C_{n-1}^{i-1}*g[i]*2^{C(n-i,2)} g[n]=2C(n,2)i=1n1Cn1i1g[i]2C(ni,2)
这玩意和①式很像,但求和项只有n-1项,不好做。但我们发现,i=n的情况恰好可得g[n]。于是
2 C ( n , 2 ) = ∑ i = 1 n C n − 1 i − 1 ∗ g [ i ] ∗ 2 C ( n − i , 2 ) = ∑ i = 0 n − 1 C n − 1 i ∗ g [ i + 1 ] ∗ 2 C ( n − 1 − i , 2 ) 2^{C(n,2)}=\\sum_{i=1}^{n}C_{n-1}^{i-1}*g[i]*2^{C(n-i,2)}=\\sum_{i=0}^{n-1}C_{n-1}^{i}*g[i+1]*2^{C(n-1-i,2)} 2C(n,2)=i=1nCn1i1g[i]2C(ni,2)=i=0n1Cn1ig[i+1]2C(n1i,2)
f[n]=2^C(n,2)的EGF为F(x)g0[i]=g[i+1]的EGF为G0(x),则
F ( x ) = C 0 + ∫ F ( x ) ∗ G 0 ( x ) d x , G 0 ( x ) = G ′ ( x ) F(x)=C0+\\int F(x)*G0(x)dx,G0(x)=G'(x) F(x)=C0+F(x)G0(x)dxG0(x)=G(x)
求导得
[ l n F ( x ) ] ′ = G ′ ( x ) [lnF(x)]'=G'(x) [lnF(x)]=G(x)
值得注意的是,幸好不定积分加C的常数项只影响g[0],所以直接对F(x)套多项式求ln的模板即可。

弱连通DAG计数

传送门:https://www.luogu.com.cn/problem/P6295

弱连通DAG:有向边换成无向边以后是连通图的那些DAG。

先考虑怎么求DAG个数。设f[n]为所求。考虑一个巧妙的DAG构造过程:设现在有一个n-i个点的DAG,我们从i个点向n-i个点任意连边。但我们发现,我们这么做并不能保证那i个点就是所有入度为0的点。为了指定入度为0的点,考虑定义集合A = {p1,p2,...,p[m]}为,指定A集合的点必须入度为0,其他点无限制的DAG个数。则f[n]等于所有可能的集合A的并集的大小(注:集合A非空,因为入度为0的点必须至少有1个)。套容斥原理公式:
f [ n ] = ∑ i = 1 n ( − 1 ) i + 1 ∗ C n i ∗ 2 i ∗ ( n − i ) ∗ f [ n − i ] , f [ 0 ] = 1 f[n]=\\sum_{i=1}^n (-1)^{i+1}*C_n^i*2^{i*(n-i)}*f[n-i],f[0]=1 f[n]=i=1n(1)i+1Cni2i(ni)f[ni]f[0]=1
in-i不应该绑定,考虑解绑:
i ∗ ( n − i ) = C ( n , 2 ) −

以上是关于指数型生成函数:贝尔数无向连通图计数弱连通DAG计数的主要内容,如果未能解决你的问题,请参考以下文章

图的计数

题解 边双连通图计数

[P4841]无向连通图计数与生成函数

LuoguP4841 城市规划

《算法竞赛进阶指南》0x5C计数类DP AcWing307n个点的连通无向图数量

有标号的DAG/强连通图计数