题目分析:1.无向图欧拉回路是否连通2.所有点的度为偶数。并查集+degree
这题题目保证了是联通的 所以就不用判断是否联通了
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <cmath> #define rap(a, n) for(int i=a; i<=n; i++) #define MOD 2018 #define LL long long #define ULL unsigned long long #define Pair pair<int, int> #define mem(a, b) memset(a, b, sizeof(a)) #define _ ios_base::sync_with_stdio(0),cin.tie(0) //freopen("1.txt", "r", stdin); using namespace std; const int maxn = 110, INF = 0x7fffffff; int n; int drgee[maxn], f[maxn], line[maxn][maxn]; //int find(int x) //{ // return f[x]==x?x:(f[x]=find(f[x])); //} void print(int u) { for(int i=1; i<=50; i++) if(line[u][i]) { line[u][i]--; line[i][u]--; print(i); printf("%d %d\n", i, u); } } int main() { int T, cnt, kase = 0; scanf("%d", &T); while(T--) { cnt = 0; mem(drgee, 0); mem(line, 0); // rap(1, maxn-1) f[i] = i; scanf("%d", &n); rap(1, n) { int u, v; scanf("%d%d", &u, &v); drgee[u]++; drgee[v]++; line[u][v]++; line[v][u]++; // f[u] = v; } printf("Case #%d\n", ++kase); // rap(1, n) // { // if(f[i] == i) // { // cnt++; // break; // } // } // if(cnt > 1) // { // cout<< "some beads may be lost" <<endl; // if(T) printf("\n"); // continue; // } cnt = 0; rap(1, 50) { if(drgee[i] & 1) { cnt++; break; } } if(cnt > 0) { printf("some beads may be lost\n"); if(T) printf("\n"); continue; } rap(1, 50) { print(i); } if(T) printf("\n"); } return 0; }