zoukankan      html  css  js  c++  java
  • hdoj3018-欧拉回路

    题目链接

    思路

     对于每一个连通图,如果不含度数为奇数的点则可以判定为欧拉回路,只需要一组人就可以;对含有奇数度的点,则需要奇数度的点的个数/2组人才能完成游历;

    code

    #include <iostream>
    #include <cstring>
    #include <fstream>
    using namespace std;
    
    const int MAX = 100000+5;
    
    int f[MAX], in[MAX], g[MAX];
    
    int find(int x) {
        if(f[x] != x)  {
            f[x] = find(f[x]);
        }
        return f[x];
    }
    
    void unit(int x, int y) {
        x = find(x);
        y = find(y);
        f[y] = x;
    }
    
    int main(){
        std::ios::sync_with_stdio(false);
        std::cin.tie(0);
        //ifstream cin("data.in");
        int n, m;
        while(cin >> n >> m) {
            memset(in, 0, sizeof(in));
            memset(g, 0, sizeof(g));
            for(int i = 1; i <= n; ++ i) {
                f[i] = i;
            }
            while(m--) {
                int a, b;
                cin >> a >> b;
                if(a != b) {//当终点和起点相同时忽略
                    in[a] ++;
                    in[b] ++;
                    unit(a, b);
                }
            }
            int ans = 0;
            for(int i = 1; i <= n; ++ i) {
                if(in[i] & 1) {      //出现奇数度的点时,在其连通分量上记录
                    g[find(i)] ++;
                }
            }
            for(int i = 1; i <= n; ++ i) {
                if(f[i] == i && in[i] > 0) {
                    if(g[i] == 0) {   //欧拉回路
                        ans ++;
                    }
                    else {          //非欧拉回路
                        ans += g[i] / 2; 
                    }
                }
            }
            cout << ans << endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    及时说爱
    坚持
    html5新增元素
    js call
    smarty实例教程
    JS 跨浏览器兼容问题
    CSS3中的5个有趣的新技术
    jQuery和dom转化
    前端安全问题
    js apply
  • 原文地址:https://www.cnblogs.com/topk/p/6580076.html
Copyright © 2011-2022 走看看