#define min(a,b) a<b?a:b
vector<int>e[5005];
stack<int>S;
int dfn[1005];
int low[1005];
int time,Bcnt;
int Belong[1005];
int in_stack[1005];
int size_stack[1005];
void tarjan(int u)
{
int i,v;
S.push(u);
in_stack[u]=true;
dfn[u]=low[u]=++time;
for(i=0;i<e[u].size();i++)
{
v=e[u][i];
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(in_stack[v])
{
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u] == low[u])
{
Bcnt++;
do{
v=S.top();
S.pop();
Belong[v]=Bcnt;
in_stack[v]=false;
size_stack[Bcnt]++;
}while(v!=u)
}
}
模板_tarjan强连通缩点算法
最新推荐文章于 2019-09-27 21:23:00 发布