1 条题解

  • 0
    @ 2026-10-25 23:19:37

    思路

    桥条件是low[child]>dfn[parent],必须按父边ID跳过而非按父顶点,避免平行边误判;使用迭代DFS处理3万点深链,支持多组0或0 0终止。

    参考程序(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n,m;while(cin>>n&&n){cin>>m;vector<vector<pair<int,int>>>g(n);for(int id=0;id<m;id++){int u,v;cin>>u>>v;--u;--v;g[u].push_back({v,id});g[v].push_back({u,id});}vector<int>dfn(n),low(n),parent(n,-1),pe(n,-1),next(n);int timer=0,ans=0;for(int s=0;s<n;s++)if(!dfn[s]){vector<int>st(1,s);dfn[s]=low[s]=++timer;while(!st.empty()){int u=st.back();if(next[u]<(int)g[u].size()){auto e=g[u][next[u]++];int v=e.first;if(e.second==pe[u])continue;if(!dfn[v]){parent[v]=u;pe[v]=e.second;dfn[v]=low[v]=++timer;st.push_back(v);}else low[u]=min(low[u],dfn[v]);}else{st.pop_back();if(parent[u]>=0){int p=parent[u];if(low[u]>dfn[p])ans++;low[p]=min(low[p],low[u]);}}}}cout<<ans<<'\n';}}
    
    • 1

    信息

    ID
    1587
    时间
    1000ms
    内存
    256MiB
    难度
    普及
    标签
    递交数
    1
    已通过
    1
    上传者