[模板]Tarjan

 1 void tarjan(int u){
 2     dfn[u]=low[u]=++time;top++;stack[top]=u;instack[u]=1;
 3     if(!dfn[out[u]]){
 4         tarjan(out[u]);low[u]=min(low[u],low[out[u]]);
 5     }
 6     else if(instack[out[u]])low[u]=min(low[u],low[out[u]]);
 7     if(dfn[u]==low[u]){
 8         np=stack[top];preans=1;
 9         while(np-u){instack[stack[top]]=0;top--;np=stack[top];preans++;}
10         instack[stack[top]]=0;top--;
11         if(preans>1)ans=min(ans,preans);
12     }
13 }
View Code

 

posted @ 2019-07-07 06:21  DeepinC  阅读(62)  评论(0编辑  收藏  举报