割边求调 qwq
  • 板块学术版
  • 楼主dark_moon
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/1 09:28
  • 上次更新2024/8/1 09:51:50
查看原帖
割边求调 qwq
417018
dark_moon楼主2024/8/1 09:28
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define int long long
using namespace std;
auto mread = [](){int x;scanf("%lld", &x);return x;};
const int N = 3e4 + 5;
int n, m, ans, dfn[N], low[N], idx;
vector<pair<int, int> > v[N];
void tarjan(int x, int id){
    dfn[x] = low[x] = ++idx;
    for(auto t : v[x]){
        if(dfn[t.fi] == 0){
            tarjan(t.fi, t.se);
            low[x] = min(low[x], low[t.fi]);
            if(low[t.fi] > dfn[x]){
                ans ++;
            }
        }
        else if((t.se ^ 1) != id){
            low[x] = min(low[x], dfn[t.fi]);
        }
    }
    return;
}
signed main(){
    int tmp = 0;
    while(1){
        idx = 0;
        cin >> n >> m;
        if(n == 0){
            return 0;
        }
        if(tmp){
            printf("\n");
        }
        tmp ++;
        for(int i = 1; i <= n; i ++){
            v[i].clear();
            dfn[i] = low[i] = 0;
        }
        int tot = 0;
        for(int j = 1, x, y; j <= m; j ++){
            x = mread(), y = mread();
            v[x].push_back(mp(y, tot ++));
            v[y].push_back(mp(x, tot ++));
        }
        ans = 0;
        tarjan(1, -1);
        printf("%lld", ans);
    }
    return 0;
}

感谢感谢感谢感谢/bx

2024/8/1 09:28
加载中...