仙人掌图

Cactus Graphs

Posted by hongzhiyin on October 6, 2019

定义

无自环、无重边的无向连通图,任意一条边,最多属于一个简单环。

仙人掌图中的每个环都是一个点双连通分量。

可用 $dfs$ 找出环的个数以及每个环的大小。

1
2
3
4
5
6
7
8
9
10
11
int dep[N];
void dfs(int u, int f=0) {
    dep[u] = dep[f] + 1;
    for (auto v : e[u]) if (v != f) {
        if (!dep[v]) {
            dfs(v, u);
        } else if (dep[u] > dep[v]) {
            Circle.pb(dep[u] - dep[v] + 1);
        }
    }
}

也可用 $Tarjan$ 算法求出所有的点双连通分量,即所有的环,包括环的个数、每个环的大小以及每个环都由哪些点构成。