指数型生成函数:贝尔数无向连通图计数弱连通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=1∑ndp[n−i]∗Cn−1i−1=i=0∑n−1dp[n−1−i]∗Cn−1i,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=0∑nCni∗fi∗gn−i
很像,即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>=1∑i!fi−1∗xi
那么为了让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]=1
得C=-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=1∑n−1Cn−1i−1∗g[i]∗2C(n−i,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=1∑nCn−1i−1∗g[i]∗2C(n−i,2)=i=0∑n−1Cn−1i∗g[i+1]∗2C(n−1−i,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)dx,G0(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个数。设 以上是关于指数型生成函数:贝尔数无向连通图计数弱连通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=1∑n(−1)i+1∗Cni∗2i∗(n−i)∗f[n−i],f[0]=1
i
和n-i
不应该绑定,考虑解绑:
i
∗
(
n
−
i
)
=
C
(
n
,
2
)
−