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