冷滟泽的个人博客冷滟泽的个人博客

边双连通图和点双连通图的计数

冬令营的时候完全不会生成函数,听这块的时候全程掉线。。现在洛谷有了这两个模板,于是来总结一下自己的理解。

参考资料:WC2019 课件《生成函数,多项式算法与图的计数》

本文中图的计数均指有标号图的计数。

前置知识

无向连通图计数

f_n 表示 n 个点的简单连通图个数,也就是我们要求的东西。

我们令 g_n 表示 n 个点的简单无向图(不一定连通)个数。考虑每条边选/不选,容易得到 g_n=2^{\binom{n}{2}} .

F(x),G(x) 分别为 \left\{f_n\right\},\left\{g_n\right\} 的指数生成函数。考虑把一个不连通的图划分为若干个连通块,那么这些块之间没有联系,且每个块内部的生成函数是 F(x) . 这个模型可以视为将 n 个元素划分为任意多个非空子集,每个大小为 k 子集内部有 f_k 种染色方案,即 G(x)=\exp\;F(x) . 反过来要求 F(x) ,那么有 F(x)=\ln\;G(x) ,套一下多项式板子即可。

(扩展)拉格朗日反演

复合逆

若两个函数 F(x), G(x) 满足 F(G(x))=x ,则称 FG 互为复合逆。此时有 G(F(x))=xFG 的常数项均为 0 .

拉格朗日反演是在 F(x),G(x) 为多项式且已知 G 的情况下求 F 的某一项系数的一种方法。有关系式:

[x^n]F(x)=\frac{1}{n}[x^{-1}]\frac{1}{G^n(x)}

要用 -1 次幂就很难受,乘个 x^n 就可以变成:

[x^n]F(x)=\frac{1}{n}[x^{n-1}]\left(\frac{x}{G(x)}\right)^n

然后拉格朗日反演还有它的扩展形式(以下两个算法都会应用到它):

[x^n]H[F(x)]=\frac{1}{n}H'(x)\left(\frac{x}{G(x)}\right)^n

边双连通图计数

这个好像比较简单,就从这个说起吧。

b_n 表示 n 个点的有根边双连通图个数,d_n 表示 n 个点的有根连通图个数,对应的指数生成函数分别为 B(x)D(x) (实际上有根和无根的区别就是乘了个 n)。

考虑一个连通图。它长成这个样子: g1.png

其中 1 号点为根节点。我们把一个边双缩成一个方点: g2.png (图中节点对应的原图节点编号的区间)

设根节点所在的边双叫做 S ,其中有 n 个点,则它所对应的指数 EGF 为 \frac{b_nx^n}{n!} . 然后这个边双中会引出几条到别的连通子图里的边。考虑其中一个连通子图,它内部方案的生成函数为 D(x) 。此外,它的根节点还会通过这条边连向 S 中的任意一个节点,所以这一部分的生成函数就变成了 nD(x) . 我们把连向 S 中同一点的连通子图视为一类,则一类中的连通子图是可以任意交换顺序的。那么所有外挂连通子图的生成函数就是 \exp(nD(x)) . 枚举 S 的大小并求和得

D(x)=\sum_{n\geq 1}\frac{b_nx^n\exp(nD(x))}{n!}=B(x\exp D(x)) .

未经允许不得转载:冷滟泽的个人博客 » 边双连通图和点双连通图的计数

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址