社区讨论

割边求调 qwq

学术版参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lzall7y9
此快照首次捕获于
2024/08/01 09:29
2 年前
此快照最后确认于
2024/08/01 09:51
2 年前
查看原帖
CPP
#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

回复

2 条回复,欢迎继续交流。

正在加载回复...