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;
}

 

posted @ 2019-01-13 14:21  Jathon-cnblogs  阅读(165)  评论(0编辑  收藏  举报