[模板]Tarjan
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
$Fate \ is \ Fake$