zoukankan      html  css  js  c++  java
  • HDU 1878 欧拉回路 图论

    解题报告:题目大意,给出一个无向图,判断图中是否存在欧拉回路。

    判断一个无向图中是否有欧拉回路有一个充要条件,就是这个图中不存在奇度定点,然后还要判断的就是连通分支数是否为1,即这个图是不是连通的,这个用并查集就可以了。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 int map[1005];
     6 int prim[100005];
     7 int find(int n) {
     8     return prim[n]==n? n:(prim[n] = find(prim[n]));
     9 }
    10 
    11 int main() {
    12     int n,m,x,y;
    13     while(scanf("%d",&n)&&n) {
    14         scanf("%d",&m);
    15         for(int i = 1;i<=n;++i)
    16         prim[i] = i;
    17         memset(map,0,sizeof(map));
    18         for(int i = 1;i<=m;++i) {
    19             scanf("%d%d",&x,&y);
    20             map[x]++;
    21             map[y]++;
    22             if(x>y)
    23             swap(x,y);
    24             prim[find(x)] = find(y);
    25         }
    26         int flag = 1;
    27         int d = find(1);
    28         for(int i = 1;i<= n;++i) {
    29             if(find(i) != d) {
    30                 flag = 0;
    31                 break;
    32             }
    33             if(map[i]%2) {
    34                 flag = 0;
    35                 break;
    36             }
    37         }
    38         printf(flag? "1
    ":"0
    ");
    39     }
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    不用加减乘除做加法
    数组中只出现一次的数字
    平衡二叉树
    二叉树的深度
    两个链表的第一个公共结点
    连续子数组的最大和
    最小的K个数
    数组中出现次数超过一半的数字
    二叉搜索树与双向链表
    复杂链表的复制
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3191387.html
Copyright © 2011-2022 走看看