1 ///强连通模板
 2 void dfs(int u)
 3 {
 4     dfn[u]=low[u]=++dfs_cut;
 5     vs[u]=1;
 6     s.push(u);
 7     for (int i=0;i<g[u].size();i++)
 8     {
 9        int v=g[u][i];
10         if(!vs[v])
11         {
12             dfs(v);
13             low[u]=min(low[v],low[u]);
14         }
15         else if (!scc[v]) low[u]=min(low[u],dfn[v]);
16     }
17     if (low[u]==dfn[u])
18     {
19         gcc_cut++;
20         int cut=0;
21         while (1)
22         {
23             int v=s.top();
24             cut++;
25             s.pop();
26             scc[v]=gcc_cut;
27             if (u==v) break;
28 
29         }
30         ans[gcc_cut]=cut;
31     }
32 }

 

posted on 2016-07-29 20:30  pb2016  阅读(152)  评论(0编辑  收藏  举报