zoukankan      html  css  js  c++  java
  • uva 10596 Morning Walk

     其实题意不是很明白,看了别人的解题报告然后按照思路来实现,最后AC了,但是对于题意还是很有问题

    判断是否有欧拉回路,图要连通(用并查集来处理),然后所有顶点的度数为偶数

    在这个博客中 http://www.cnblogs.com/penseur/archive/2011/02/28/1967412.html  说输入的边中要包含所有的点才是存在,但是按照这个AC代码以及网上找回来的大部分代码表明是不需要包括所有代码的

    例如

    10 2

    8 9

    9 8

    输出Possible

    按照这个AC代码的意思应该是前面的点可以不存在,但是一旦出现了第i个点,那么必须从第i个点到第n-1个点都存在,而且图连通,度为偶数,才存在欧拉回路

    例如

    10 4

    2 3

    3 2

    8 9

    9 8

    输出 Not Possible

    #include <stdio.h>
    #include <string.h>
    #define N 210
    #define M 10010
    int d[N],p[N];
    int n,m;
    
    int find(int x)
    {  return p[x]==x ? x : find(p[x]);  }
    
    int main()
    {
        int i,j,u,v,x,y,tmp,flag;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            if(!m) { printf("Not Possible\n"); continue; }
            memset(d,0,sizeof(d));
            for(i=0; i<n; i++) p[i]=i;
    
            for(i=1; i<=m; i++)
            {
                scanf("%d%d",&u,&v);
                d[u]++; d[v]++;
                x=find(u);
                y=find(v);
                if(x!=y)
                    p[u]=v;
            }
    
            for(i=0; d[i]==0; i++) ;
            tmp=find(i); flag=1;
            for(j=i+1; j<n; j++)
                if(tmp!=find(j) || (d[j]%2) )
                { flag=0; break;}
    
            if(flag) printf("Possible\n");
            else     printf("Not Possible\n");
    /*
            printf("d: ");
            for(i=0; i<n; i++) printf("%d ",d[i]);
            printf("\n");
            printf("find: ");
            for(i=0; i<n; i++) printf("%d ",find(i));
            printf("\n");
    */
        }
        return 0;
    }
  • 相关阅读:
    window.top.location
    JS 退出系统并跳转到登录界面的实现代码
    CSS position 属性
    在网页中插入时间 自动更新
    CKeditor 配置使用
    使用JspSmart文件上传
    复制的web工程为什么不能部署到tomcat
    JDBC 4 PreparedStatement 与Statement 的区别
    每周会商自动化
    晚上的亲子时光
  • 原文地址:https://www.cnblogs.com/scau20110726/p/2745164.html
Copyright © 2011-2022 走看看