Codeforces Round #375 (Div. 2) E - One-Way Reform 无向图有向化+欧拉回路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiang_6/article/details/83550010

本场详细题解见:https://blog.csdn.net/xiang_6/article/details/83549528

题意&思路见上述链接

#include<bits/stdc++.h>

using namespace std;

#define out fflush(stdout)
#define fast ios::sync_with_stdio(0),cin.tie(0);

#define FI first
#define SE second

typedef long long ll;
typedef pair<int,int> P;

const int maxn = 200 + 7;
const int INF = 0x3f3f3f3f;

vector<int> vec[maxn];
int d[maxn];
bool g[maxn][maxn];

int n, m, ans;

void init() {
    ans = 0;
    for(int i = 1; i <= n; ++i) d[i] = 0;
    for(int i = 1; i <= n+1; ++i) {
        for(int j = 1; j <= n+1; ++j) {
            g[i][j] = 0;
        }
    }
    scanf("%d%d", &n, &m);
    int u, v;
    for(int i = 1; i <= m; ++i) {
        scanf("%d%d", &u, &v);
        g[u][v] = g[v][u] = 1;
        d[u]++;
        d[v]++;
    }
    for(int i = 1; i <= n; ++i) {
        if(d[i]&1) g[i][n+1] = g[n+1][i] = 1;
        else ans++;
    }
}
void dfs(int id) {
    //cout << id << " +++++++++++++++ " << endl;
    for(int i = 1; i <= n+1; ++i) {
        if(!g[id][i]) continue;
        if(id != n+1 && i != n+1) printf("%d %d\n", id, i);
        g[id][i] = g[i][id] = 0;
        dfs(i);
    }
}
void solve() {
    printf("%d\n", ans);
    for(int i = 1; i <= n+1; ++i) {
        dfs(i);
    }
}
int main() {
    int T; scanf("%d", &T);
    while(T--) {
        init();
        solve();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/xiang_6/article/details/83550010