码迷,mamicode.com
首页 > 其他好文 > 详细

HDU-1878-欧拉回路

时间:2019-01-13 15:01:36      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:mes   als   its   col   put   节点   amp   name   bre   

欧拉回路的条件是所有节点的度数为偶数并且是联通图,但是照这题的描述所说并不需要所有点都联通,如果某个点的度为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;
}

 

HDU-1878-欧拉回路

标签:mes   als   its   col   put   节点   amp   name   bre   

原文地址:https://www.cnblogs.com/Angel-Demon/p/10262481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!