贝尔数: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个数。设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
)
−
C
(
i
,
2
)
−
C
(
n
−
i
,
2
)
i*(n−i)=C(n,2)-C(i,2)-C(n-i,2)
i∗(n−i)=C(n,2)−C(i,2)−C(n−i,2)
这个等式的组合意义很简单,把n个元素划分为i
和n-i
,n中选2的每种可能情况都枚举一遍。
f
[
n
]
=
∑
i
=
1
n
(
−
1
)
i
+
1
2
C
(
i
,
2
)
∗
i
!
∗
(
n
!
∗
2
C
(
n
,
2
)
)
∗
f
[
n
−
i
]
2
C
(
n
−
i
,
2
)
∗
(
n
−
i
)
!
f[n]=\sum_{i=1}^n \frac{(-1)^{i+1}}{2^{C(i,2)}*i!}*(n!*2^{C(n,2)})* \frac{f[n-i]}{2^{C(n-i,2)}*(n-i)!}
f[n]=i=1∑n2C(i,2)∗i!(−1)i+1∗(n!∗2C(n,2))∗2C(n−i,2)∗(n−i)!f[n−i]
把n!*2^C(n,2)
除过去,可设
F
(
x
)
=
∑
n
>
=
0
f
[
n
]
2
C
(
n
,
2
)
∗
n
!
F(x)=\sum_{n>=0}\frac{f[n]}{2^{C(n,2)}*n!}
F(x)=n>=0∑2C(n,2)∗n!f[n]
G ( x ) = ∑ n > = 0 ( − 1 ) n + 1 2 C ( n , 2 ) ∗ n ! G(x)=\sum_{n>=0}\frac{(-1)^{n+1}}{2^{C(n,2)}*n!} G(x)=n>=0∑2C(n,2)∗n!(−1)n+1
我们希望补充i=0
的项:-1(使得它完全是个多项式乘法),故记F0(x)=F(x)-1
,则
F
0
(
x
)
=
F
(
x
)
−
1
=
F
(
x
)
∗
G
(
x
)
=
>
F
(
x
)
=
1
1
−
G
(
x
)
F0(x)=F(x)-1=F(x)*G(x) => F(x)=\frac{1}{1-G(x)}
F0(x)=F(x)−1=F(x)∗G(x)=>F(x)=1−G(x)1
套多项式求逆模板即可(PS:之前还忘记拆分C(n,i)
,真的太菜了QAQ)。
DAG与弱连通DAG的关系,和无向图与连通无向图的关系,是一样的,所以对f[n]
的EGF,记为F1(x)
,套多项式求ln的模板,即可得答案数列的EGF。(②)
我只是推倒公式,代码就不写了。因此只给出神犇的代码:https://www.luogu.com.cn/paste/pd9wir1e
参考神犇的blog:https://blog.csdn.net/qq_34940287/article/details/107191864
②的一个理解
摘自:https://www.luogu.com.cn/blog/lx-2003/generating-function-advanced
对于其他东西而不只是非空子集,也可以由类似的解释搞出一个exp。抽象一下,就是要把n个有标号的球放到任意多个无标号的盒子里,并且一个放有k个球的盒子有
a[k]
种染色方案,那么放球并染色的方案就是e^A(x)
。
记A(x)=sum(ans[n]/n!*x^n)
为弱连通DAG答案数列的EGF,则e^A(x)
表示把n个点划分为任意多个弱连通DAG的答案数列的EGF,这就等价于n个点的DAG个数的EGF。更具体地:
A
(
x
)
k
k
!
\frac {A(x)^k}{k!}
k!A(x)k
就是把n个点划分为k个弱连通DAG的答案数列的EGF。之所以要除以k!
,是因为EGF求的是k个元素的排列个数,但是它们应该是无序的。