描述

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

可以用并查集做,也可以直接建图做。

因为正在加班加点的学习数据结构,于是先建图做了一次。

参考了http://www.cnblogs.com/dongsheng/archive/2012/06/04/2534489.html

建图:

//Asimple

#include <stdio.h>
#include <iostream>
#include <algorithm> using namespace std; const int maxn = 1005;
int n, T, num, cnt, point, line, x, y;
int G[maxn][maxn];
int vis[maxn];//标记数组,标记是否走过
int p[maxn];//每个节点的度 //图的DFS
//欧拉图:节点度数全部为偶数
//半欧拉图:有且只有两个度数为奇数的节点
//这两种图都可以一笔画出。 void DFS(int i)
{
int v;
vis[i] = 1 ;
for(v=0; v<point; v++)
if( v!=i && G[i][v] && !vis[v])
DFS(v);
} int main()
{
cin >> T ;
while( T -- )
{
cnt = 0 ;
bool flag = true ;
cin >> point >> line ;
memset(p,0,sizeof(p));
memset(vis,0,sizeof(vis));
memset(G,0,sizeof(G)); for(int i=0; i<line; i++)
{
cin >> x >> y ;
G[x-1][y-1] = G[y-1][x-1] = 1 ;//建图
++ p[x-1] ;
++ p[y-1] ;//统计 各节点的度
}
DFS(0);//判断是否连通
for(int i=0; i<point; i++)
{
G[i][i] = 1 ;
if( vis[i]==0 ) flag = false ;
if( p[i]&1 ) cnt ++ ;
}
if( flag )//是连通图
{
if( cnt==0 || cnt==2 ) cout << "Yes" << endl ;
else cout << "No" << endl ;
}
else cout << "No" << endl ;
} return 0;
}

并查集:

#include <cstdio>
#include <iostream>
#include <cstring> using namespace std; int father[1005], deg[1005]; int find(int k)
{
if(k == father[k])
return k;
else
return father[k] = find(father[k]);
} int main()
{
int T, p, q, a, b; scanf("%d", &T);
while(T--)
{
scanf("%d%d", &p, &q);
for(int i = 1; i <= p; ++i)
{
father[i] = i;
deg[i] = 0;
} while(q--)
{
scanf("%d%d", &a, &b);
++deg[a];
++deg[b];
int fa = find(a);
int fb = find(b);
if(fa != fb)
father[fa] = fb;
} int cnt1, cnt2;
cnt1 = cnt2 = 0;
for(int i = 1; i <= p; ++i)
{
if(father[i] == i)
{
++cnt1;
if(cnt1 > 1)
break;
}
if(deg[i] & 1)
++cnt2;
}
if(cnt1 > 1)
printf("No\n");
else
{
if(cnt2 == 0 || cnt2 == 2)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}

ACM题目————一笔画问题的更多相关文章

  1. ACM题目————中缀表达式转后缀

    题目描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2.同理,后缀表达式就是操作符在两 ...

  2. HDU ACM 题目分类

    模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 104 ...

  3. ACM题目推荐(刘汝佳书上出现的一些题目)[非原创]

    原地址:http://blog.csdn.net/hncqp/article/details/1758337 推荐一些题目,希望对参与ICPC竞赛的同学有所帮助. POJ上一些题目在http://16 ...

  4. 有一种acm题目叫做,奇葩!

    本文全然没有技术含量,纯粹是娱乐. 我事实上想写点东西.可是近期好像做计算几何做得太多了,一种想说说不出东西的感觉,唯有写一下一些奇葩的题目了. HDU3337:Guess the number pi ...

  5. ACM题目————STL练习之求次数

    题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=1112 描述 题意很简单,给一个数n 以及一个字符串str,区间[i,i+n-1] 为一个 ...

  6. ACM题目————zoj问题

    题目1006:ZOJ问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:20322 解决:3560 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. ...

  7. ACM题目————又见拦截导弹

    描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:它的第一发炮弹能够到达任意的高度,但是以后每一发炮 ...

  8. ACM题目————还是畅通工程

    Submit Status Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路 ...

  9. ACM题目————小A的计算器

    Description 以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示.  现在小A要在这个操作系统上实现一个计算器,这 ...

随机推荐

  1. sqlplus登陆

    cd \sqlplus sys@test_id as sysdba 切换用户SQL> connect system@test_id

  2. 磁盘io负载查看

    转自:http://blog.csdn.net/i_am_jojo/article/details/7698458 为了方便各位和自己今后遇到此类问题能尽快解决,我这里将查看linux服务器硬盘IO访 ...

  3. Eclipse+SVN搭建开发环境

    目前我们开发环境为:windows service 2008 r2 x64 现在开始记录一下eclipse+SVN环境搭建过程: 1,)下载 VisualSVN-Server-3.4.2-x64:ht ...

  4. MySQL: ERROR13(HY000):Can't get stat of

    在mysql中load data数据 mysql> load data infile '/home/a.txt' into table table_a;ERROR 13 (HY000): Can ...

  5. StringBuffer类总结

    package day13; /* StringBuffer是字符串缓冲区. 是一个容器. 特点: 1,长度是可变化的. 2,可以字节操作多个数据类型. 3,最终会通过toString方法变成字符串. ...

  6. 构造器Constructor是否可被override?

    构造器Constructor是否可被override? 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading.

  7. CORBA的简单介绍及HelloWorld(zhuan)

    http://blog.csdn.net/drykilllogic/article/details/25971915

  8. 浅谈js中的数据类型,使用typeof获取js数据类型

    JS中的数据类型 1):Undefined——值未定义 注:Undefined类型只有一个值,即特色的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined ...

  9. paper 19 :机器学习算法(简介)

    本来看了一天的分类器方面的代码,乱乱的,索性再把最基础的概念拿过来,现总结一下机器学习的算法吧! 1.机器学习算法简述 按照不同的分类标准,可以把机器学习的算法做不同的分类. 1.1 从机器学习问题角 ...

  10. 包括post,get请求(http,https)的HttpClientUtils

    package cn.knet.data.untils; import java.io.IOException; import java.net.SocketTimeoutException; imp ...