一笔画问题
来源:互联网 发布:php调用微信支付接口 编辑:程序博客网 时间:2024/04/30 00:16
描述zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。规定,所有的边都只能画一次,不能重复画。输入第一行只有一个正整数N(N<=10)表示测试数据的组数。每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。输出如果存在符合条件的连线,则输出"Yes",如果不存在符合条件的连线,输出"No"。样例输入24 31 21 31 44 51 22 31 31 43 4样例输出NoYes/* 题解 : 首先要判断给出的连线是否是一个整体,如果不是一个整体,就直接输出“No”,否则就判断是否是欧拉回路,如果是欧拉回路,输出“Yes”, 否则输出“No”.*///标程:#include<iostream>#include<cstdio>#include<cstring>using namespace std;int father[2010], r[2010];int find(int x){if(x != father[x]) { father[x]=find(father[x]); } return father[x]; }void combine(int x,int y){ x = find(x); y = find(y); if(x == y) return ; if(r[x] > r[y]) { father[y]=x; r[x]++; } else { if(r[x] == r[y]) r[y] ++; father[x]=y; } }int main(){// freopen("a.txt","r",stdin); int a[2010], i, t;cin >> t;while(t --){int n, m;cin >> n >> m;int u, v;for(i = 1; i <= n; ++ i){father[i] = i;r[i] = 0;}memset(a,0,sizeof(a)); for(i = 1; i <= m; i ++){cin >> u >> v;a[u] ++;a[v] ++;u = find(u);v = find(v);if(u != v) combine(u,v);}int cnt(0), cnt1(0);for(i = 1; i <= n; i ++){if(a[i] % 2 == 1) ++ cnt;if(find(i) == i) ++ cnt1;}if((cnt == 2 || cnt == 0) && cnt1 == 1) cout << "Yes" << endl;else cout << "No" << endl;}return 0;}
0 0
- 一笔画问题
- 一笔画问题
- 一笔画问题
- nyoj_42 一笔画问题
- NYOJ42 一笔画问题
- NYOJ42-一笔画问题
- NYOJ 一笔画问题
- 一笔画问题 nyist42
- nyoj42一笔画问题
- 一笔画问题
- 一笔画问题
- nyoj42 一笔画问题
- 一笔画问题
- NYOJ42-一笔画问题
- NYOJ42一笔画问题
- 一笔画问题
- 一笔画问题
- 42 一笔画问题
- 打印十字图(蓝桥)
- Git使用过程遇到的问题
- hadoop-2.4.0 wordcount
- 比较好的书籍---计算机,信号处理等专业
- Shell常见变量
- 一笔画问题
- vlc播放264 rtp流媒体sdp文件及其参数介绍
- 使用状态模式(state pattern)替代if else
- 基于Key-Value对的排序(Java版)
- 增加Linux系统调用——通过重新编译内核
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
- 使用filter实现url级别内存缓存示例
- 字符设备代码详解
- java利用mybatis拦截器统计sql执行时间示例