#include<iostream>
#include<cstdio>
#include<set>
#include<vector>
using namespace std;
const int maxn=1e5+5;
vector<vector<int> >g(maxn);
int n;
bool visited[maxn];
int prenum[maxn],parent[maxn],lowest[maxn],timer;
void dfs(int current,int prev)
{
prenum[current]=lowest[current]=timer;
timer++;
visited[current]=true;
int next;
for(int i=0;i<g[current].size();i++){
next=g[current][i];
if(!visited[next]){
parent[next]=current;
dfs(next,current);
//结点next搜索完毕后立刻执行的处理
lowest[current]=min(lowest[current],lowest[next]);
}else if(next!=prev){
//边current-->next为back-edge时的处理
lowest[current]=min(lowest[current],prenum[next]);
}
}
}
void art_points()
{
for(int i=0;i<n;i++){
visited[i]=false;
}
关节点(割点)
最新推荐文章于 2023-03-25 20:15:17 发布