#include <iostream>
#include <cstdio>
#include <cmath>
#include <stack>
#include <cstring>
#define ll long long
#define db double
using namespace std;
const int mn = 103;
int f[mn], ge[mn];
int ecnt, to[mn * mn], nx[mn * mn], fr[mn];
void addedge(int u, int v)
{
++ecnt;
to[ecnt] = v;
nx[ecnt] = fr[u];
fr[u] = ecnt;
}
/// Tarjan 模板
int idx, low[mn], dfn[mn];
bool insta[mn];
stack<int> sta;
void tarjan(int u, int fa)
{
int son = 0; /// 求割点
low[u] = dfn[u] = ++idx;
sta.push(u);
insta[u] = 1;
bool fir = 1; /// 带重边处理
for (int i = fr[u]; i != -1; i = nx[i])
{
int v = to[i];
if (v == fa && fir) /// 无向图
{
fir = 0;
continue;
}
if (!dfn[v])
{
/// 求割点
son++;
f[v] = u;
///
tarjan(v, u);
[tarjan缩点 + 割点 / 割边 + 重边] 无向图求割点
最新推荐文章于 2021-03-16 17:25:40 发布