仙人掌 & 圆方树
一、定义
-
仙人掌:每条边在不超过一个简单环中的连通无向图。换句话说,由简单环和树组成的图。
-
圆方树:
-
狭义圆方树(用于仙人掌):点双连通分量为方点,原图点为圆点,但是不考虑为割边的点双。
-
广义圆方树(用于一般图):点双连通分量为方点,原图点为圆点,割边点双也要算。
-
二、题目
一般来说,仙人掌题目有两种处理方法:dfs 树 or 圆方树。
实现注意事项:建了圆方树后数组大小开两倍。
dfs 树:
-
P4129 [SHOI2006] 仙人掌:判定仙人掌图与求仙人掌中的环。前者可用树上差分判断树边覆盖数 + dfs 判断连通解决,后者可在 Tarjan 途中顺便求出。
-
P4244 [SHOI2008] 仙人掌图 II:仙人掌图直径问题。可以在 Tarjan 途中对每一个点双连通分量做环形 DP 解决(形如割边的点双也可以看作环嘛)。
-
P4410 [HNOI2009] 无归岛:仙人掌最大权独立集问题。由于是最大权独立集问题,也就是只关注相邻点的 DP,这里的环形 DP 是“强行断开+连接”型的。
圆方树:
-
P5236 【模板】静态仙人掌:仙人掌图最短路在线查询。建立圆方树,用树形结构可处理大部分距离,方点处特判。具体来说,同一个环上的两点距离是很容易求得的;圆点到方点的边权为圆点到该方点父亲(也是圆点)的环上最短距离,方点到其父亲圆点的边权为 0;若 LCA 时发现 LCA 是方点,则改为求与 LCA 两个子节点(圆点)的距离关系。
-
P4320 道路相遇:无向图中在线回答某路径必经点。建立圆方树即可。
-
Tourists:无向图中在线维护最小路径权。将方点分为“父亲圆点”“孩子圆点”两部分维护,是圆方树的基本思想之一。