#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
using namespace std;
stack<int> S;
vector<int> V[100];
int dfn[100],low[100],cnt=0,color[100],cnt_color=0;
void Tayjan(int x)
{
dfn[x]=low[x]=++cnt;
for(vector<int>::iterator it=V[x].begin();it!=V[x].end();it++)
{
if(!dfn[*it])
{
S.push(*it);
Tayjan(*it);
low[x]=min(low[x],low[*it]);
}
else
{
//if(parent[x]!=*it) 判断割点割边的时候记得记录父亲节点
low[x]=min(low[x],dfn[*it]);
}
}
if(dfn[x]==low[x])
{
int tmp;
cnt_color++;
do
{
tmp=S.top();
S.pop();
color[tmp]=cnt_color;
}while(tmp!=x);
}//找连通分量
return;
}模板整理之强连通分量
最新推荐文章于 2025-08-04 15:26:01 发布

505

被折叠的 条评论
为什么被折叠?



