无向图求桥的边数(不能存在重边)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxx = 1005;
int df[maxx],low[maxx],flag[maxx];
vector<int> v[maxx];
int cnt = 0,ans = 0;

void tarjan(int x,int pre)
{
    flag[x] = 1;
    low[x] = df[x] = ++cnt;
    for(int i=0;i<v[x].size();i++){
        int now = v[x][i];
        if(now == pre) continue ;
        if(flag[now] != 1) tarjan(now , x);
        if(flag[now] == 1) low[x] = min(low[x],low[now]);
    }
    if(low[x] == df[x])
        ans++;
}
int main()
{
    int n,m,x,y;
    cin>>n>>m;
    memset(df,0,sizeof(df));
    memset(low,0,sizeof(low));
    memset(flag,0,sizeof(flag));
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    tarjan(1 , 1);
    cout<<ans - 1<<endl;
    return 0;
}
全部评论

相关推荐

10-21 00:37
已编辑
门头沟学院 C++
小浪_Coding:你问别人,本来就是有求于人,别人肯定没有义务免费回答你丫, 有点流量每天私信可能都十几,几十条的,大家都有工作和自己的事情, 付费也是正常的, 就像你请别人搭把手, 总得给人家买瓶水喝吧
点赞 评论 收藏
分享
karis_aqa:和hr没关系,都是打工的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务