#include<cstdio>
#include<cstring>
#include<iostream>
#include<stack>
using namespace std;
const int maxn=105;
int node[maxn];
struct Side{
int to,next;
}side[maxn];
int top;
void addSide(int u,int v)
{
side[u]=Side{v,node[u]};
node[u]=top++;
}
int dfn[maxn],low[maxn];
int t,sum;
stack<int> s;
void dfs(int u)
{
dfn[u]=low[u]=t++;
s.push(u);
for(int i=node[u];i!=-1;i=side[i].next){
int v=side[i].to;
if(!dfn[v])dfs(v);
if(dfn[v]!=-1)low[u]=min(low[u],low[v]);
}
int v;
if(dfn[u]==low[u]){
do{
v=s.top();s.pop();
dfn[v]=-1;
low[v]=sum;
}while(v!=u);
sum++;
}
}
int main()
{
return 0;
}
图的连通性tarjan模板
最新推荐文章于 2019-08-11 10:03:00 发布