tarjan求强联通分量 模板
1 void tarjan(int u) 2 { 3 dfn[u]=low[u]=++dfs_clock; 4 stack_push(u); 5 6 for (int c=head[u];c;c=nxt[c]) 7 { 8 int v=to[c]; 9 if (!dfn[v]) 10 { 11 tarjan(v); 12 low[u]=min(low[u],low[v]); 13 } 14 else if (!scc[v]) 15 low[u]=min(low[u],dfn[v]); 16 } 17 18 if (low[u]==dfn[u]) 19 { 20 scc_cnt++; 21 int cur; 22 for (;;) 23 { 24 scc_size[scc_cnt]++; 25 cur=stack_pop(); 26 scc[cur]=scc_cnt; 27 if (cur==u) 28 break; 29 } 30 } 31 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。