tarjan算法
void tarjan(int now) { s.push(now); in[now]=1; dfn[now]=low[now]=++tot;///注意low也要赋初值 for(int i=head[now];i;i=nxt[i]) { if(in[to[i]]) low[now]=min(low[now],dfn[to[i]]); else if(!dfn[to[i]])///这个判断可以极大程度优化时间 { tar(to[i]); low[now]=min(low[now],low[to[i]]); } } if(low[now]==dfn[now]) { col++; while(in[now]) { tmp=s.top(); s.pop(); in[tmp]=0; color[tmp]=col; } } }