点双 & 边双连通图计数的细节比较

前言

写了两个烂大街的东西,以及我研究时的一些阻碍和心路历程。

点双连通图计数

(b_i) 表示 (i) 个点的有标号 无根 点双连通图个数。(d_i)(i) 个点的 有根 连通图个数,其 EGF 为 (D(x) = sum_i frac{d_i}{i!}x^i)。显然 (D(x)) 可以用 城市规划 的方法求出((ln))。

重点思考如何在点双和连通图之间建立关系。尝试剖析有根连通图的结构:一个根,周围可能存在着一些点双连通分量,然后这些点双连通分量中的点又连着一些连通图。然而这只是很笼统的概述,我们把它细化。

首先我们称一个 有根 点双以及下面连着的一些连通图为“一个部分”。那么把若干个部分的根 叠合 在一起就是一个有根连通图。对于每个部分,考虑除根之外的所有在包含根的点双上的点,从这一个点双到“一个部分”,可以视作是将这些点 替换成一个有根连通图

然后思考点双部分怎么做。首先我们需要将根隔离开来。根据这个,写出一个部分的式子:

[sum_{ige 1} frac{b_{i+1}}{i!}cdot D^i(x) ]

解释:枚举点双的大小,包含根在内为 (i+1),虽然实际上只有 (i) 个点可以换成有根连通图,但点双部分的连接方案是 (b_{i+1})(D^i(x)) 表示将 (i) 个点每个都替换成一个有根连通图,但直接乘幂众所周知是 有序 拼接,为了而显然这不应该有序,于是 (/i!) 消除其顺序。

然后设一个机智的 EGF:(B(x)=sum_{i}frac{b_{i+1}}{i!} x^i),我们发现上式就是把 (x) 替换成了 (D(x)),即 (B(D(x)))

最后还要将这些部分组合,然后用一个根拼接,于是:

[D(x) = xexp B(D(x)) ]

然后套用扩展拉格朗日反演就可以 (O(nlog n)) 求出 (B(x)) 某一项的值了。

边双连通图计数

和点双用类似的思路,尝试剖析连通图的结构,建立其与特殊的边双连通图的关系。设 (b_i)(i) 个点的 有根 边双连通图个数,(d, D(x)) 的定义同上。

那么对于一个有根连通图,感觉边双的性质,根下面会挂上 一个 边双,边双上每一个点(包含根)都会 若干 条边,边的另一端是一个有根连通图。

根所在的边双中,每个点及其下面挂的一些连通图,我们写出它的式子:

[xexp D(x) ]

非常显然。那么这个图就是这些部分的组合:

[sum_{ige 1} b_i frac{(xexp D(x))^i}{i!} ]

(B(x)=sum_{i}frac{b_i}{i!}x^i),即得:

[D(x)=B(xexp D(x)) ]

同样可以拉反 (O(nlog n)) 求出一项。

细节剖析与对比

由于点双和边双的性质存在差异,两者推出的式子不同,推导细节上也存在出入。

下面是我学习是遇到的困惑以及可能正确的解答。

无根 与 有根

为什么点双的 (b) 是无根的而边双是有根的?

首先明确一点,就是这个边双的有根才是自然的。而点双的推导中我们由于根非常特殊,将其从“部分”中去除,实际上就将根区分开来了,自然地形成了一个有根连通图,(b_{i+1}) 仅仅是一种点双的连接方案。换言之,这幅同样的连通图可能以很多中方法被考虑多次,但孤立开来的总是不同的点,相当于有根。

边双没有任何将根特殊考虑的体现,为了与有根的 (D(x)) 对应,定义就是有根的定义。

下挂 与 替换

这个可能是我结构没理清的结果(

下挂和替换其实是非常自然的,因为点双之间是通过点连接,边双之间是通过边连接,所以考虑一个点附带的点双时自己也在里面,所以要把包括自己在内的整体替换,然而边双中一个点附带的边双不包括自己,自然是在自己的基础上额外考虑一些东西就行。

——Mr_Spade

可以发现点双边双两者在处理 分量上的点到有根连通图 的方法是有差异的。

这和点双边双本身的性质有关,而两者的方法都不会破坏其结构性质,或者漏掉某种情况。

如果点双是下挂,那一个三角形连通图都算不到,而这显然合法,漏数。

如果边双是替换,那整个包含根的边双则可能扩大(比如替换了一个三角形,这个三角形也应该是边双的一部分),也就是说真实的边双并不是 (i) 而是更大,在计算更大的边双时就会将这个图算重。

后记

https://www.cnblogs.com/-Wallace-/p/nature-of-solutions.html