指数生成函数(EGF)计数小记
有标号无向连通图计数
首先设 \(f_i\) 表示 \(i\) 个点的有标号连通图个数,\(g_i\) 表示 \(i\) 个点的任意图个数,很显然 \(g_i = 2^{i\choose2}\)。
设 \(\langle f_1,f_2, \cdots,f_n,\cdots \rangle\) 的指数生成函数(EGF)为 \(F(x)\), \(\langle g_1,g_2, \cdots,g_n ,\cdots\rangle\) 的指数生成函数为 \(G(x)\)。考虑 \(F,G\) 之间的关系:很显然一般图是由若干个连通图拼接而成。那么枚举连通块个数,得下式:
可以发现这是 \(\exp\) 的一个定义,于是:
实际上,在有标号计数中,\(\exp\) 往往可以表示若干个组的组合,而 \(\ln\) 则是其反演。
接下来有一个更严谨的正确性证明:
枚举组数 \(k\),由于带标号所有组与组之间必然不同。如果是利用卷积就行组合那么默认是有先后顺序的,实则不然。不过这可以简单地 \(/k!\) 来去重。
考虑大小为 \(n\),分为大小为 \(a_1, a_2, \cdots , a_k\) 大小的组。首先需要分配标号,从 \(n\) 个标号分出 \(k\) 组来,那么就是:
\[\dfrac{n!}{\prod_{i=1}^k a_i!} \]种分配方法。设 \(f_i\) 为大小为 \(i\) 的组的个数,\(g_i\) 表示结果,并且记 \(F(x),G(x)\) 为其 EGF。不难列出两者关系的式子:
\[g_n = \sum_{k\ge 1} \frac{1}{k!}\left(\sum_{\sum a_i=n}\dfrac{n!}{\prod_{i=1}^k a_i!}\prod_{i=1}^k f_{a_i} \right) \\ \dfrac{g_n}{n!} = \sum_{k\ge 1} \frac{1}{k!}\left(\sum_{\sum a_i=n}\prod_{i=1}^k \dfrac{f_{a_i}}{a_i!} \right) \]其中括号中的正好是 \([x^n] F^k(x)\)。于是:
\[\dfrac{g_n}{n!} = \sum_{k\ge 1} \dfrac{[x^n]F^k(x)}{k!} \Leftrightarrow G(x) = \sum_{k\ge 1} \dfrac{F^k(x)}{k!} \]事实上,EGF 中的 \(/i!\) 并没有那么显然,是推式子推出来的结果。
\(\exp,\ln\) 的计数只适用于指数生成函数,并且不能做无标号的计数。这是因为两个对象可能本质相同,不能简单的 \(/i!\),而有标号计数则因为标号必然不同。
错排计数
我们用置换环的角度考虑。对于一个排列 \(p_1, p_2, \cdots, p_n\),\(\forall i\in [1, n]\),\(i\) 向 \(p_i\) 连边,所得的一堆环即为置换环。
考虑一个置换环实际上就是一个圆排列。设 \(F(x)\) 为大小 \(\ge 2\) 的圆排列数的 EGF,那么 \(F(x)=\sum_{i\ge 2} x_i/i\)。
由上面的结论易知,答案的 EGF \(G(x) = \exp F(x) = \exp(-\ln(1-x)-x)\)。
51nod-1728 不动点
求映射 \(f:\{1, 2, \cdots, n\}\to \{1, 2, \cdots, n\}\) 满足
\[\underbrace{f\circ f\circ \cdots \circ f}_{k} = \underbrace{f\circ f\circ \cdots \circ f}_{k-1} \]的个数。\(nk\le 2\times 10^6, k\in[1, 3]\)。
首先需要看出这是一个有根森林的模型,并且树深不超过 \(k\)。
设 \(F_i(x)\) 为深度不超过 \(i\) 的森林的 EGF。那么:
乘上 \(x\) 表示用一个那些旧的根向新的根连边,组合成一个深度不超过 \(i\) 的有根树。由于要求的是森林,那么外面套一个 \(\exp\) 即可。
对于本题,地推求 \(F_k(x)\) 即可得到答案,复杂度是 \(O(k\cdot n\log n)\),需要做 \(k\) 次 \(\exp\)。
有标号基环树计数
一个无向图为基环树,当且仅当其中存在恰好一个环且大小 \(\ge 3\)。那么整个基环树可以看做是一个有根森林,然后用一个环串起来。
由 Cayley 定理可得,有根树的 EGF 为 \(F(x) = \sum\limits_{i\ge 0} \dfrac{n^{n-1}}{n!} x^i\)。那么答案的 EGF
除以 \(2\) 是因为那个环可以翻转。
有标号二分图计数
设答案的 EGF 为 \(G(x)\),有标号二分连通图的 EGF 为 \(F(x)\)。那么显然 \(G(x)=\exp F(x)\)。
设二分染色图的 EGF 为 \(H(x)\),这个图是很好数的:枚举黑色点的个数 \(k\),那么:
考虑 \(G(x)\) 和 \(H(x)\) 的关系:对于一个连通块,由于二分图的性质,当一个点的颜色确定,那整个连通块的黑白染色都是确定的。换言之,一个连通块的染色方案只有 \(2\) 种。那么枚举连通块个数 \(k\):
多项式开根可以 \(O(n\log n)\) 做,接下来的问题就是怎么算 \(H(x)\) 的系数。
其中的组合数可以直接拆,然后就是卷积的形式,但 \(2^{k(n-k)}\) 不是很好搞。考虑其指数的组合意义:左边 \(k\),右边 \(n-k\) 个元素,左右各选 \(1\) 个的方案数。这相当于 \(n\) 个元素中直接选 \(2\) 个,减掉选出的两个都在左边或都在右边的方案数,即:
由于这是指数,所以指数相加时对应乘法,那么 \(H(x)\) 自然可以卷积求出了。
LOJ-6570 毛毛虫计数
求有多少个大小为 \(n\) 的有标号无根树,满足存在一条路径,使得任何一个点到路径的距离不超过 \(1\)。
一开始想了一个及其 fake 的做法,就用一个节去接上两条毛毛虫。但这接的位置很有讲究,不能接在中间,这里面情况就很复杂了。而接上之后还是有根的,还得考虑正反……
实际上从一个个节开始考虑是最方便的。任意发现,一个大小为 \(n\) 的节就是一个菊花图然后定根。不难得到其 EGF:\(A(x)=\sum\limits_{i\ge 1} \dfrac{x^i}{(i-1)!}\)。然后有先后顺序地拼接起来,得到答案的 EGF:\(F(x)=\frac{1}{2}\sum_{i\ge 1} A^i(x)=\dfrac{1}{2(1-A(x))}\)。除以 \(2\) 是因为正反。
但这样是会重的:对于某个端点存在很多挂着的点时,会以这个端点一个点也不挂的形式再被算好多次。那索性钦定两端的节的点数 \(\ge 2\)。设端点节的 EGF 为 \(B(x)=\sum\limits_{i\ge 2} \dfrac{x^i}{(i-1)!}\),于是:
有标号仙人掌计数
仙人掌的定义是,每条边最多属于一个简单环的无向连通图。
考虑和树的计数一样的想法,先算有根,最后可以 \(/n\) 得到无根的结果。
设答案 EGF 为 \(F(x)\)。对于一个点,将其作为根,下面接着一坨东西,那么有两种情况:
- 下方只有一条边和根向相邻,那么就是 \(F(x)\);
- 下方若干个仙人掌串成一条,然后两端向根连边。枚举仙人掌个数 \(i\),得 \(\frac{1}{2}\sum_{i\ge 2}F^i(x)\)。
第一种情况下面可以有若干个仙人掌,而第二种下面也可以有若条仙人掌串,于是使用 \(\exp\) 组合起来,得到一个方程:
然后我们要……解这个方程!首先设 \(G(x) = x\left(\exp \frac{2F(x)-F^2(x)}{2-2F(x)}\right) -F(x)\),然后尝试牛顿迭代。先求导:
化简到此处已经出现了大量重复的部分了,考虑换元使式子更简洁。设 \(A(F(x))=2F(x)-F^2(x),B(F(x))=2-2F(x)\)。那么:
就行了牛迭的式子就不难写了:
时间复杂度 \(O(n\log n)\),常数有点大。
有标号 DAG 计数
设 \(n\) 个点有标号 DAG 的个数为 \(f_n\),其 EGF 为 \(F(x)\)。考虑在图中添加入度为 \(0\) 的点来构造 DAG,那么有:
但这样会算重,比如 \(2\to 1, 3\to 1\) 这张图,会在 \(i=1\) 时算两次,在 \(i=2\) 时又算一次。考虑容斥原理:
接下来只要求出 \(f_1, f_2, \cdots, f_n\) 就行了。推式子:
可以发现数二分图时用到的一个处理 \(2^{i(n-1)}\) 的 trick 又派上用场了。现在这已经像个卷积形式了,但是有一点不同,因为 \(f_n\) 的值基于前面的项,分治 FFT 可以 \(O(n\log^2 n)\) 求解。然而我们还有复杂度更低的做法。
设 \(g_n = \frac{(-1)^{n-1}}{2^{n\choose 2}n!}\),\(G(x)\) 为其生成函数。于是:
可以多项式求逆,\(O(n\log n)\)。
点双 & 边双连通图计数
https://www.cnblogs.com/-Wallace-/p/vbcc-ebcc-counting.html
有标号强连通图计数
很大程度上收到了 这题 的启发,当然一些必要的部分还是写一下。(由于找不到测的地方所以只有口胡,如果出锅希望可以在评论区指出错误并把我 D 爆)
设答案为 \(f_n\),EGF 为 \(F(x)\)。
首先一个显然的正难则反,就是答案等于所有的图减去非强连通图个数。而一个图非强连通,当且仅当这个图进行强连通分量缩点之后是点数 \(\ge 2\) 的 DAG。先写一下 \(n\) 个点的有标号 DAG 个数(\(a_n\),EGF为 \(A(x)\))的式子:
具体解释可以参考上面链接。
注意这里不能直接吧 \(A(x)\) 中的 \(x\) 换做 \(F(x)\)(答案 EGF)然后复合逆,因为直接将一个点扩张之后会存在多个点可以连边,而这并不能直接复合函数体现。
更加靠谱的做法应该是直接在上面的式子中把缩完之后的点扩张,那么得到的就是一般有标号有向图的个数,记作 \(b_n\):
看上去很复杂,但是发现后面那一大坨就是 \(\sum_{k\ge 1} \frac{(-1)^{k+1} F^{k}(x)}{k!}\) 的 \(x^i\) 项系数 \(\times i!\)。不妨设其为 \(G(x)\),易得 \(G(x)=-\exp(-F(x))\)。
然后看到 \(i\)、\(n-i\) 的一下就想到是要我们凑一个卷积形式。设 \(C_1(x)=\sum_{i} \frac{b_i x^i}{i!\cdot 2^{i\choose 2}}, C_2(x)=\sum_{i} \frac{b_i x^i}{i!}\cdot 2^{i\choose 2},H(x)=\sum_{i} [x^i]G(x)\cdot \frac{1}{2^{i\choose 2}}\)。于是显然:
多项式 \(\ln\) 解这个方程即可。
本文来自博客园,作者:-Wallace-,转载请注明原文链接:https://www.cnblogs.com/-Wallace-/p/count-by-egf.html