指数生成函数学习笔记&做题记录
咕咕了好久,指数生成函数 (EGF) 它终于来了!
前置知识
一些定义
指数生成函数 (EGF) 指下面这种形式的生成函数:
卷积形式:
这个直接把 \(i!\) 移动到后面去就好了。
从这个式子可以发现,两个 EGF 卷起来本质上就是先在 \(A\) 里面选 \(j\) 个,然后在 \(B\) 里面选 \(i-j\) 个,然后排成一排的方案数。
有啥用
指数生成函数主要解决有标号的图的计数问题。
在解决这个之前,我们先要解决它的封闭形式。
对于 \(a_i=1\),来说,它的生成函数就是:
这个可以使用泰勒展开证明。
同理,对于 \(a_i=p^i\) 形式,那么同理, \(\hat A(x)=e^{px}\)。
还有一个比较重要的,就是 \(a_i=(i-1)!\),此时 \(\hat F=\sum \frac{x^n}{n}=-\ln(1-x)\)。
会求这个东西之后,可以来解决有标号图计数问题。
具体作用就是,EGF 可以实现一般图和连通图直接的转化。
假设 \(n\) 个点的一般图的 EGF 是 \(\hat F\),连通图是 \(\hat G\),(连通块无标号)。
那么结论是:
这两个直接做都是 \(O(n\log n)\)。
考虑证明它,对第一个进行证明,考虑对于一个一般图,枚举一下连通块个数。
后面的好理解,考虑前面的 \(\frac{1}{i!}\) 是啥。
考虑把每个点放到 \(i\) 个集合中的一个,那么每个数可以随便选,但是对于一种选法,可以把集合的编号进行随意排列,这样得到的计数结果会重复,所以除掉这样的 \(i!\)。
然后直接化简:
还有一个阴间情况是连通块有标号,那么就是相当于前面的式子没有 \(\frac{1}{i!}\)。用类似的方法可以推出。
下面是有标号计数大杂烩。
- 有标号无根树、森林计数。
树直接 purfer 序列,答案是 \(n^{n-2}\),森林的话就直接求 \(\exp\) 即可。
- 有标号有根树、森林计数。P4981
树直接 purfer 然后去定一个根,\(n^{n-1}\),森林有一个更优美的做法,把所有根连向 \(0\),然后就可以直接 purfer 了,答案是 \((n+1)^{n-1}\)。
- 有标号无向图计数。P4841
不连通直接
然后转 EGF,求 \(\ln\) 即可。
- 有标号 DAG 计数。P6295
考虑不连通咋做,是 bzoj2863。
考虑一张 DAG 中,如果把所有入度为 \(0\) 的点扔掉,那么必然还是一个 DAG,所以可以枚举有几个点入度为 \(0\),然后会发现这个东西需要容斥,式子就是:
暴力做复杂度 \(O(n^2)\),可以过上面的题。
考虑化简。
此时有一个问题就是说 \(2^{i(n-i)}\) 做不了。
考虑把它变成可以用 \(i,n-i,n\) 表示的东西。
可以发现 \(2^{ab}=2^{\frac{(a+b)^2-a^2-b^2}{2}}\),这样就可以了。
但有一个问题,就是除二不一定可以整除,会寄,可以把 \(2\) 变成 \(\sqrt{2}\) 然后求二次剩余,但是太麻烦了。
考虑换一下:\(2^{ab}=2^{\frac{(a+b)(a+b+1)-a(a+1)-b(b+1)}{2}}\),此时就可以拆了。
拿去原式,变成:
此时有一个寻宝做法,直接分治 NTT 求,时间复杂度 \(O(n\log^2 n)\)。
AK 做法是,直接换成 \(F=GF+1\) 的形式,直接多项式求逆,时间复杂度 \(O(n\log n)\)。
连通的话直接求 \(\ln\) 即可。
- 有标号二分图计数。P7364
先可以得到一个很寻宝的东西:
也就是选出一些点到一边,剩下在另一边的方案数。
这样会有一个问题,就是说可能不联通,而且多一个连通块方案数就会乘 \(2\),因为可以放左边也可以放右边。
对上面的式子变形:
这样可以直接求联通的个数。
求不连通的,就相当于求 \(\ln\) 再 \(\exp\),那么可以发现 \(\hat H=\sqrt{\hat F}\)。直接开根即可。
- 有标号强联通竞赛图计数。
设 \(f\) 表示竞赛图,\(g\) 表示强联通竞赛图,显然就是先变成若干个强连通块,然后对强连通块标号,使得满足拓扑关系。
所以
- 贝尔数,P5748
考虑一个盒子 \(n\) 个不同的球,需要盒子非空,显然方案数为 \([n\ge 1]\),其 EGF 就是 \(e^x-1\)。
然后考虑答案就是若干组上面的东西卷起来。
因为盒子相同,组合起来就是