描述

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. html 二级联动(省市联动)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. ios-XML文档解析之SAX解析

    首先SAX解析xml *xml文档的格式特点是节点,大体思路是把每个最小的子节点作为对象的属性,每个最小子节点的'父'节点作为对象,将节点转化为对象,输出. 每个节点都是成对存在的,有开始有结束.有始 ...

  3. java 笔记(1)-—— JVM基础,内存数据,内存释放,垃圾回收,即时编译技术JIT,高精度类型

    1.java中5个存放数据的地方: (1).寄存器(Registers):位于CPU内部,是速度最快的存储区,但是数量和容量有限.在java中不能直接操作寄存器. (2).栈(Stack):栈位于通用 ...

  4. iOS 判断字符串中含有某个字符串 rangeOfString

    //判断roadTitleLab.text 是否含有qingjoin if([roadTitleLab.text rangeOfString:@"qingjoin"].locati ...

  5. Leetcode: Number of Islands II && Summary of Union Find

    A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand oper ...

  6. PHP检测用户名是否存在

    reg.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  7. [转]mongodb 查询条件:关系运算符"$lt", "$lte", "$gt", "$gte", "$ne" 逻辑运算符"$and“, "$or“, "$nor“

    mongodb 查询条件   这节来说说mongodb条件操作符,"$lt", "$lte", "$gt", "$gte" ...

  8. 关于GridView只显示一样的问题

    如果GridView不管怎么改都只能显示一行的话,就重写GridView,自定义GridView: public class MyGridView extends GridView { public ...

  9. mongo聚合和mapreduce例子

    聚合语句-比较集合内两字段大小 db.test.aggregate([ {$match:{"offlineTime":{$gt:ISODate("2016-09-13T0 ...

  10. Oracle存储过程总结

    1.存储过程结构 1.1 第一个存储过程 create or replace procedure proc1( para1 varchar2, para2 out varchar2, para3 in ...