圆方树/仙人掌树 学习笔记

圆方树

圆方树最初是处理「仙人掌图」(每条边在不超过一个简单环中的无向图)的一种工具,不过发掘它的更多性质,有时我们可以在一般无向图上使用它。

在圆方树中,原来的每个点对应一个 圆点,每一个点双对应一个 方点

共有 \(n+x\) 个点,\(n\) 个圆点,\(x\) 个方点,其中 \(x\) 是点双连通分量的数量。

计算 \(\text{dfn,low}\) 可以使用 \(\text{Tarjan}\) 算法。

如何建树

对于每个点双连通分量,我们新建一个方点,对于点数连通分量中的每一个点,与其连边。最后重构图即可。


例题:

P5236

考虑建立圆方树。

我们发现,本题等价于求两点到 \(\text{LCA}\) 的距离。但怎么设置边权?

对于每个点,我们求出他到方点的父亲的距离作为边权即可。

CF487E

还是建立圆方树,用数据结构维护路径最小值。

但是更改太多了,我们可以维护每一个方点的儿子中,点权的最小值。维护只需要对于每个方点开 \(\text{multiset}\) 即可。

posted @ 2026-01-20 17:28  mo_mo_yu  阅读(1)  评论(0)    收藏  举报