1 void dfs(int u,int fa) 2 { 3 dfn[u]=low[u]=++dfs_cut; 4 vs[u]=1; 5 s.push(u); 6 int p=1; ///去重 7 for (int i=0;i<g[u].size();i++) 8 { 9 int v=g[u][i]; 10 if (v==fa&&p) 11 { 12 p=0; 13 continue; 14 } 15 if (!vs[v]) 16 { 17 dfs(v,u); 18 low[u]=min(low[u],low[v]); 19 } 20 else low[u]=min(low[u],dfn[v]); 21 } 22 23 ///缩点 24 if (low[u]==dfn[u]) 25 { 26 bcc_cut++; 27 int x; 28 while (1) 29 { 30 x=s.top(); 31 s.pop(); 32 bcc[x]=bcc_cut; 33 if (x==u) break; 34 } 35 } 36 }
时间: 2024-12-29 11:55:41