描述

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. 使用CollectionView做横向滑动分页效果:

    一开始几页滑动是没有问题的,等滑到三四个页面之后,就出现奇怪的缝隙,一开始死活找不到原因,最后在layout的代理方法minimumLineSpacingForSectionAtIndex返回值设置为 ...

  2. ios之无限图片轮播器的实现

    首先实现思路:整个collectionView中只有2个cell.中间始终显示第二个cell. 滚动:向前滚动当前cell的脚标为0,向后滚动当前的cell脚标为2.利用当前cell的脚标减去1,得到 ...

  3. Oracle自增长ID

    在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给主键.例如一下语句创建了一个名为customer_id_seq的序列,这个序列的起始值为1,增量 ...

  4. asp.net treeview 异步加载

    在使用TreeView控件的时候,如果数据量太大,这个TreeView控件加载会很慢,有时甚至加载失败, 为了更好的使用TreeView控件加载大量的数据,采用异步延迟加载TreeView. 在Tre ...

  5. mini install centOS log

    no ifconfig yum install net-tools ------------------------------------------------------------------ ...

  6. linux:计算机概论

    1>.计算机的五大单元:输入单元.输出单元.CPU内部的控制单元.算术逻辑判断单元和主记忆体单元(记忆体包含主记忆体和辅组记忆体): 2>.CPU分为两类:精简微指令集(RISC)和复杂微 ...

  7. JAVA的String 类

    String类 1.String对象的初始化 由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下: String s = “abc”; s ...

  8. C++Primer 第十章

    //1.标准库算法不仅可以应用于容器,还可以应用于内置数组,指针. //2.大多数算法都定义在头文件algorithm中.标准库还在头文件numeric中定义了一组数值泛型算法. //3.算法本身不会 ...

  9. PHP Parse Error: syntax error, unexpected $end 错误的解决办

    可以在php.ini中设置short_open_tag = On 第一步,登录到sql命令行   第二步,使用sql语句修改root密码 使用sql语句改密码时一定要选中数据库 .使用 use mys ...

  10. 2-sat(and,or,xor)poj3678

    Katu Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7949   Accepted: 2914 Descr ...