zoukankan      html  css  js  c++  java
  • 南阳42--一笔画问题

     

    一笔画问题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
     
    描述

    zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。

    规定,所有的边都只能画一次,不能重复画。

     
    输入
    第一行只有一个正整数N(N<=10)表示测试数据的组数。
    每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)
    随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。
    输出
    如果存在符合条件的连线,则输出"Yes",
    如果不存在符合条件的连线,输出"No"。
    样例输入
    2
    4 3
    1 2
    1 3
    1 4
    4 5
    1 2
    2 3
    1 3
    1 4
    3 4
    样例输出
    No
    Yes
    来源
    [张云聪]原创
    上传者
    张云聪
    //判断节点的度来判断图的连通, 感觉这个题判题不严格。
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 
     7 const int INF = 0x3f3f3f3f;
     8 int father[1010], degree[1010], vis[1010];
     9 int i, j, n, flag;
    10 
    11 void init()
    12 {
    13     memset(vis, 0, sizeof(vis));
    14     memset(degree, 0, sizeof(degree));
    15     for(i=1; i<=n; i++)
    16     father[i] = i;
    17 }
    18 
    19 int find(int a)
    20 {
    21     while(a != father[a])
    22     a = father[a];
    23     return a;
    24 }
    25 
    26 void mercy(int a, int b)
    27 {
    28     int q = find(a);
    29     int p = find(b);
    30     if(q != p)
    31     father[q] = p;
    32 }
    33 
    34 int main()
    35 {
    36     int m, t;
    37     scanf("%d", &t);
    38     while(t--)
    39     {
    40         scanf("%d %d", &n, &m);
    41         init();
    42         for(i=0; i<m; i++)
    43         {
    44             int a, b;
    45             scanf("%d %d", &a, &b);
    46             if(a == b) continue;  
    47             mercy(a, b);    //自己到自己,   
    48             degree[a]++; degree[b]++;
    49             vis[a] = vis[b] = 1;
    50         }
    51         int total = 0, sum = 0;
    52         for(i=1; i<=n; i++)
    53         {
    54             if(vis[i] && father[i] == i)
    55             total++;
    56             if(degree[i] % 2 == 1)
    57             sum++;
    58         }
    59         if((sum == 2 || sum==0 ) &&total == 1)
    60         printf("Yes
    ");
    61         else
    62         printf("No
    ");
    63     }
    64     return 0;
    65 }

    //It's bad. ~ !

  • 相关阅读:
    mysql dump 完全备
    CentOS7位安装MySql教程
    mysql 数据备份
    Linux下iostat命令详解
    端口映射
    git+jenkins jar包代码的发布加新建项目
    腾讯面试题
    PHP-----类与对象,成员方法,成员属性,构造方法,析构方法
    PHP-----二维数组和二分查找
    PHP-----数组和常见排序算法
  • 原文地址:https://www.cnblogs.com/soTired/p/4689209.html
Copyright © 2011-2022 走看看