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 }