闲话

vscode 被我调 ntt 搞炸了 所以这篇博客直接在 cnblogs 上写了
寄(
update:不是 vscode,是除了浏览器外的部分

今日推歌:一人行者 - ilem feat. 心华
我知道你可能想说什么但是一人行者是真的很好听
所以今天我脑子里一直在循环播放 所以我推这首歌
而且感觉这歌能比较好的刻画一部分人群 反正我挺有感触的
所以听听?
虽然这首歌是 ilem 老师 16 年写的 但是确实很好听

?为何我点双计数的提交记录里谁的代码都看不了

连通图计数

有标号无向连通图计数

众所周知有标号无向图是由有标号无向连通图拼成的。假设有标号无向图的 egf 是 \(F\),则有标号无向连通图的 egf 就应当是 \(\ln F\),由于有标号 \(\text{Set}\) 构造的逆在 gf 上就是 \(\ln\)\(F\) 的构造是简单的。

下面记有标号有根无向连通图的 egf 为 \(C\)

边双连通图计数

假设有根无向边双连通图的 egf 是 \(B(x)\)

考虑如何构造一个有根无向连通图。我们可以枚举一个极大边双联通分量的大小 \(k\),以及连在它上面的无向联通子图。前半部分的方案数是 \(B[k]\),后半部分的方案数的 egf 是 \(\exp(kC(x)) = \left(\exp C(x)\right)^k\)。这也就导出

\[C(x) = \sum_{k\ge 0} B[k] \left(\exp C(x)\right)^k \frac{x^k}{k!} = B(x\exp C(x))
\]

我们若设 \(F(x) = x\exp C(x)\),则有

\[B(x) = C\left(F^{\langle -1 \rangle}(x)\right)
\]

这启发我们通过拉格朗日反演提取系数:

\[\begin{aligned}

& [x^n]B(x)
\\ = \ & [x^n]C\left(F^{\langle -1 \rangle}(x)\right)
\\ = \ & \frac{1}{n}[x^{n - 1}] C'(x) \left(\frac{x}{x \exp C(x)}\right)^n
\\ = \ & \frac{1}{n}[x^{n - 1}] C'(x) \exp\left (-n C(x)\right)

\end{aligned}\]

这就有 \(O(n\log n)\) 提取单项的方式。记得除 \(n\)

点双连通图计数

假设有根无向点双连通图的 egf 是 \(D(x)\)

考虑如何构造一个有根无向连通图。由于根可能在多个点双连通分量内,考虑这些分量的交有且仅有根这一个节点,我们不妨求出删掉根后其中一个点双连通分量所在连通块的 egf,最后作 \(\text{Set}\) 构造再加入根即可。

下面只考虑 \(n > 1\) 的情况,这保证了每个点双连通分量的大小定大于等于 \(2\)
我们可以枚举点双连通分量的大小 \(k + 1\)。删除根后点双联通分量的大小即为 \(k\)。如果删掉这个点双连通分量中所有边(而不是点),我们能得到 \(k\) 个连通块,它们的 egf 都是 \(C(x)\)。因此其中一个点双联通分量所在连通块的 egf 即为

\[\sum_{k \ge 0} D[k + 1] C^k(x) \frac{1}{k!} = D'(C(x))
\]

这也就导出

\[C(x) = x\exp D'(C(x))
\]

稍加变形得到

\[D'(C(x)) = \ln \frac{C(x)}{x}
\]

我们若设 \(F(x) = \ln \dfrac{C(x)}{x}\),则有

\[D'(x) = F\left(C^{\langle -1 \rangle}(x)\right)
\]

这启发我们通过拉格朗日反演提取系数:

\[\begin{aligned}

& [x^n]D'(x)
\\ = \ & [x^n]F\left(C^{\langle -1 \rangle}(x)\right)
\\ = \ & \frac{1}{n}[x^{n - 1}] F'(x) \left(\frac{x}{C(x)}\right)^n
\\ = \ & \frac{1}{n}[x^{n - 1}] F'(x) \left(\exp( -F(x))\right)^n
\\ = \ & \frac{1}{n}[x^{n - 1}] F'(x) \exp( -nF(x))

\end{aligned}\]

这就有 \(O(n\log n)\) 提取单项的方式。

最终可以发现两个答案的形式是相似的。