• NYOJ 42 一笔画问题


     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 int father[1005];
     5 int degree[1005];
     6 int find(int x)
     7 {
     8     if(x!=father[x])
     9         father[x]=find(father[x]);
    10     return father[x];
    11 }
    12 void merge(int x,int y)
    13 {
    14     x=find(x);
    15     y=find(y);
    16     if(x!=y)
    17         father[x]=y;
    18 }
    19 int main()
    20 {
    21     int i,a,b,n,p,q,cnt,dnt; 
    22     scanf("%d",&n);
    23     while(n--){
    24         cnt=dnt=0;
    25         memset(degree,0,sizeof(degree));
    26         scanf("%d%d",&p,&q);
    27         for(i=1;i<=p;i++)
    28             father[i]=i;
    29         while(q--){
    30             scanf("%d%d",&a,&b);
    31             if(a==b) continue;
    32             degree[a]++;
    33             degree[b]++;
    34             merge(a,b);
    35         }
    36         for(i=1;i<=p;i++){
    37             if(father[i]==i)
    38                 cnt++;
    39             if(degree[i]&1)
    40                 dnt++;
    41         }
    42         if(cnt==1&&(dnt==0||dnt==2))
    43             puts("Yes");
    44         else
    45             puts("No");
    46     }
    47     //system("pause");
    48     return 0;
    49 }

    解题思路: 

    在18世纪的哥尼斯堡城里有七座桥。当时 有很多人想要一次走遍七座桥,并且每座桥只能经过一次。这就是世界上很有名的哥尼斯堡七桥问题。你能一次走遍这七座桥,而又不重复吗?(自己动手画画吧)

    答案

      16.一笔画问题

      这个问题,实际上是一笔画问题。

      一笔画就是一笔可以画成一个图。

      判断一笔画的方法:

      ①是连通的。一个图,如果图上任意二点总有线段连接着,就称为连通的。不是连通的就不能一笔画出。

      ②奇点个数是0或者是2。图上线段的端点可以分成二类,奇点和偶数。一个点,以它为端点的线段数是奇数就称为奇点,线段数是偶数就称为偶点。

      一个图是否是一笔画就看奇点的个数,奇点个数是 0 或者 2,就是一笔画,否则就不是一笔画。

      哥尼斯桥问题,就是一笔画问题。但因A、B、C、D四个点都是奇点即奇点的个数是4,而不是0或2,所以不是一笔画,也就不能一次走遍,而又不重复。

    今天又复习了一遍并查集的概念,参见:http://www.nocow.cn/index.php/%E5%B9%B6%E6%9F%A5%E9%9B%86

  • 相关阅读:
    redis使用lua脚本遇到的问题
    redis使用scan count 返回数量不准确
    window系统下搭建本地的NuGet Server
    windows10使用docker发布.netcore程序
    windows10使用docker安装mysql
    windows10搭建redis4.0集群
    windows10配置redis主从复制
    windows10安装redis4.0
    mysql 共享排他锁
    mysql drop表以后恢复数据
  • 原文地址:https://www.cnblogs.com/shihuajie/p/2969207.html
Copyright © 2020-2023  润新知