• HDU1878——欧拉回路(并查集)


    http://acm.hdu.edu.cn/showproblem.php?pid=1878

    题意:这道题讲的是判断是否是一个欧拉回路。

    欧拉通路: 通过图中每条边且只通过一次,并且经过每一顶点的通路。

    欧拉回路: 通过图中每条边且只通过一次,并且经过每一顶点的回路。

     无向图是否具有欧拉通路或回路的判定:

    欧拉通路:图连通;图中只有0个或2个度为奇数的节点

    欧拉回路:图连通;图中所有节点度均为偶数

     有向图是否具有欧拉通路或回路的判定:

    欧拉通路:图连通;除2个端点外其余节点入度=出度;1个端点入度比出度大1;一个端点入度比出度小1 或 所有节点入度等于出度

    欧拉回路:图连通;所有节点入度等于出度

    这道题的算法思路:利用并查集先判断图连通性,然后利用in数组记录各点的度。(因为该题是无向图)

    判断条件:当一个点的根节点与其他点的根节点不等,则不连通,则返回0;当该点的度数是奇数时则非欧拉图,返回0;其他情况返回1

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    //判断连通性,然后判断度相同 
    int IN[1001];//入度 
    int par[1001],n,m;
    int find(int x);
    void unite(int x, int y);
    int find(int x) {
        return par[x] == x ? x : par[x] = find(par[x]);
    }
    
    void unite(int x, int y) {
        x = find(x);
        y = find(y);
        if(x == y) return;
        par[x] = y;
       
    }
    int main(){
        while(~scanf("%d",&n),n){
            memset(IN,0,sizeof(IN));
            
            for(int i=1;i<=n;i++){
                par[i]=i;//多个等号啊!!!! 
            }
            scanf("%d",&m);
            for(int i = 0; i < m; i++) {
                int a, b;
                scanf("%d%d", &a, &b);
                unite(a, b);
                IN[a]++; IN[b]++;
            }
            int flag=1;
            int temp=find(1);
            for(int i=1;i<=n;i++){
                if(IN[i] & 1)flag=0;
                if(find(i)!=temp)flag=0;
            }
            printf("%d
    ",flag);
        } 
        return 0;
    }

    代码进步点:对于相同的都需要循环for1-n时,可以考虑放在一起判断。

    判断是否能被2整除时,可以直接用位运算&1

    如果判断一个数组所有的数是否都相等,那么只要找到第一个数,判断其他是否和他相等就可以了。不用相邻的两个两个判断。

    后记:既然自己不聪明,那就靠自己的努力!努力是为了看起来不那么费劲。。。加油!

  • 相关阅读:
    批处理 windows service 的安装与删除
    HTML 页面元素介绍
    六 redis学习笔记之发布订阅
    发布个c#版的HandlerSocket客户端类库
    数据库单元测试
    一 redis学习笔记之环境搭建
    七 redis学习笔记之持久化
    三 redis学习笔记之排序
    四 redis学习笔记之事务
    元数据编程实战_使用Emit运行时生成Protobuf编码类
  • 原文地址:https://www.cnblogs.com/Yvettey-me/p/4541649.html
Copyright © 2020-2023  润新知