广义串并联图

一、广义串并联图的定义

广义串并联图,对于任意 \(4\) 个节点都不存在 \(6\) 条两两没有公共边的路径连接这 \(4\) 个节点中的每一对节点的无向连通图。

树,仙人掌等都是广义串并联图。

二、广义串并联图的性质

广义串并联图重要的是一种思想——将图缩合。

每次删 \(1\) 度点、缩 \(2\) 度点、叠重边。

具体就是如下三种操作:

  1. 将度数为 \(1\) 的点删除。

  2. 对于一个度数为 \(2\) 的点 \(a\),设其连接了 \((a, b)\)\((a, c)\),将 \((b, a)\)\((a, c)\) 缩成 \((b, c)\)

  3. 对于重边,只保留一条。

可以证明,广义串并联图经过缩合后只剩下一个点。

设图 \(G = (V, E)\)\(|V| = n, |E| = m\),当 \(m - n \le k\)\(k\) 较小时,可以考虑广义串并联图。

经过如上缩合操作后,\(m - n\) 单调不增。

最终图中只剩下度数 \(\ge 3\) 的点,所以 \(m \ge \dfrac{3}{2}n, k \ge m - n \ge \dfrac{1}{2}n\)

得到 \(n \le 2k, m \le 3k\),就将图缩合到了一个极小的范围内。

三、例题

P6790 [SNOI2020] 生成树

\(G\) 在删完一条边后是仙人掌,首先大力猜测 \(G\) 是广义串并联图。

然后考虑将 \(G\) 缩合,对于每条边 dp。

对于一条边 \(e\),设 \(f_e\) 表示这条边在生成树上的方案数,\(g_e\) 表示这条边不在生成树上的方案数。

  • \(1\) 度点

    • 直接将 \(f_e\) 乘进总方案数。
  • \(2\) 度点

    • 设两条边分别为 \(x, y\),新边为 \(e\),由于生成树上 \(x\)\(y\) 至少有一条边存在,新边在生成树上当且仅当 \(x\)\(y\) 都在生成树上。

    • \[\begin{cases} f_e = f_x \cdot f_y \\ g_e = f_x \cdot g_y + f_y \cdot g_x \end{cases} \]

  • 叠重边

    • 设两条重边分别为 \(x, y\),新边为 \(e\),由于生成树上 \(x\)\(y\) 不能同时存在,新边不在生成树上当且仅当 \(x\)\(y\) 都不在生成树上。

    • \[\begin{cases} f_e = f_x \cdot g_y + f_y \cdot g_x \\ g_e = g_x \cdot g_y \end{cases} \]

叠重边时可以利用 map,拓扑排序确定缩点的顺序,时间复杂度 \(\mathcal{O}(m \log m)\),如果用哈希表可以做到 \(\mathcal{O}(m)\)

posted @ 2023-07-12 20:26  Fido_Puppy  阅读(485)  评论(0编辑  收藏  举报
Title