广义串并联图
1. 定义
广义串并联图,即不存在同胚于 \(K_4\) 的子图的无向连通图。
树,仙人掌等都是广义串并联图。
2. 性质
广义串并联图的主要思想为将图缩合。
每次删 \(1\) 度点、缩 \(2\) 度点、叠重边。
具体为以下三种操作:
-
将度数为 \(1\) 的点删除。
-
对于一个度数为 \(2\) 的点 \(a\),设其连接了边 \((a, b)\) 和 \((a, c)\),将 \((b, a)\) 和 \((a, c)\) 缩成 \((b, c)\)。
-
对于重边,只保留一条。
可以证明,广义串并联图经过缩合后只剩下一个点。
设图 \(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\),就将图缩合到了一个极小的范围内。
3. 例题
3.1 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,拓扑排序确定缩点的顺序,时间复杂度 \(\Theta(m \log m)\),使用哈希表可以做到 \(\Theta(m)\)。