描述

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. CommonJS规范

    CommonJS是一种规范,NodeJS是这种规范的实现.CommonJS是一 个不断发展的规范,计划将要包括如下部分: Modules Binary strings and buffers Char ...

  2. qsort函数用法

    qsort函数用法   qsort 功 能: 使用快速排序例程进行排序 用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(co ...

  3. ofbiz进击 第四节。 我的form之旅

    一般使用ofbiz做后台管理的时候,多数会使用ofbiz的form去做后台.下面我就总结下我在使用form的时候的一些总结与问题吧. 1.首先,我们看如何使用最简单form去查询某个单个的对象,并对其 ...

  4. paper 65 :尺度不变特征变换匹配算法[转载]

    尺度不变特征变换匹配算法 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟,本文帮你跨越.1.SIFT综述 尺度不变特征转换(Scale-invariant feature transf ...

  5. AP模块的发票过账后关联对应的凭证编号。

    --AP发票 SELECT GJH.NAME,GJH.LEDGER_ID,GJH.JE_CATEGORY, GJH.JE_SOURCE,XDL.SOURCE_DISTRIBUTION_TYPE, XT ...

  6. 夺命雷公狗—angularjs—1—三种数据版定方式

    我们在实际开发中几乎都是脱离不掉数据绑定方式的,绑定方法如下所示: <!DOCTYPE html> <html lang="en" ng-app> < ...

  7. 词频统计-------------web版本

    要求:把程序迁移到web平台,通过用户上传TXT的方式接收文件.建议(但不强制要求)保留并维护Console版本,有利于测试. 在页面上设置上传的控件,然后在servlet中接受,得到的是一个字节流, ...

  8. 查看linux的出错信息

    先执行:dmesg -c > /dev/null 该命令是把之前的一些信息删除,-c选项表示:Clear the ring buffer after first printing its con ...

  9. Android学习参考

    收到一些朋友的微博私信,说能不能给Android新手们一些指导,我只能说指导谈不上,毕竟我也很多东西正在学习中,与此同时一大学同学准备转行Android,可以说是从头开始,那么我就姑且以一个过来人的身 ...

  10. Azure Deploy

    http://msdn.microsoft.com/en-us/library/dn408531.aspx https://www.windowsazure.com/en-us/documentati ...