HDU-1878-欧拉回路(欧拉回路)
欧拉回路的条件是所有节点的度数为偶数并且是联通图,但是照这题的描述所说并不需要所有点都联通,如果某个点的度为0,被孤立,依旧可能存在欧拉回路;
所以用set来存度不为0的节点,用并查集判联通就好了
#include "bits/stdc++.h" using namespace std; int degree[1005]; int pre[1005]; set<int> st; int find(int id) { if (pre[id] == -1) { return id; } return pre[id] = find(pre[id]); } int main() { int n, m, a, b; while (scanf("%d", &n) && n) { scanf("%d", &m); memset(degree, 0, sizeof(degree)); memset(pre, -1, sizeof(pre)); st.clear(); while (m--) { scanf("%d%d", &a, &b); st.insert(a); st.insert(b); if (find(a) != find(b)) { pre[find(a)] = find(b); } degree[a]++; degree[b]++; } bool flag = true; int first = find(*st.begin()); for (auto i : st) { if (degree[i] & 1 || find(i) != first) { flag = false; break; } } puts(flag ? "1" : "0"); } return 0; }