关闭

1250: HH的米5【并查集】+【欧拉回路】

标签: 欧拉回路并查集
293人阅读 评论(0) 收藏 举报
分类:


1250: HH的米5

时间限制: 1 Sec  内存限制: 128 MB
提交: 101  解决: 28
[提交][状态][讨论版]

题目描述

HH新买了一台手机小米5,他给自己的新手机设置了一个高端大气上档次的屏幕保护锁(其实就是一个9宫锁屏),保护锁有一个特点,就是需要一笔画下来才能解锁,HH就在想,如果给定N个点和M条边,那么该图是否可以通过一笔将该图画下来呢?他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。

输入

第一行只有一个正整数T(T<=10)表示测试数据的组数。 每组测试数据的第一行有两个正整数N,M(N<=1000,M<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到N) 随后的M行,每行有两个正整数A,B(0<a,b<n),表示编号为a和b的两点之间有连线。< p="">

输出

如果存在符合条件的连线,则输出"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

欧拉回路:

从无向图的一个节点出发走出一条道路,每条边恰好经过一次这样的,这样的道路称为“欧拉回路”(E图)

在欧拉道路中“进”,“出”是一一对应的(除了起点和终点之外),其他点的“进出”次数应该相等,即除了起点跟终点之外,其他点的度数应该是偶数;

如果一个图是无向连通图,且最多有两个奇点(度数为奇数),则一定存在欧拉回路,如果有两个奇点,必须从一个奇点出发到另一个奇点结束,如果不存在奇点,则可以从任意的点出发,必存在欧拉回路

对于有向图来说同样最多只能有两个点的出度不等于入度,而且必须把其中一个入度比出度大一的点作为起点,而入度比出度小一的点作为终点,当然忽略图的方向,图必须是连通的

#include<iostream>
#include<cstring>
#include<queue>
#define MAX 1005
using namespace std;
int Map[MAX][MAX],visit[MAX];
int P,Q,con;//con用于记录连通点的个数 
int Euler(){
	int cont=0;//统计奇度点的个数 
	queue<int>q;
	q.push(1);
	visit[1]=1;
	while(!q.empty()){
		int t=q.front();
		q.pop();
		con++;
		int sum=0;//记录这个点的边数 
		for(int i=1;i<=P;i++){
			if(Map[t][i]){
				if(!visit[i]){
					visit[i]=1;
					q.push(i);
				}	
				sum++;
			}
		}
		if(sum%2){
			cont++;
		}
	} 
	return cont;
}
int main(){
	int T; cin>>T;
	while(T--){
		cin>>P>>Q;
		memset(visit,0,sizeof(visit));
		memset(Map,0,sizeof(Map));
		con=0;
		for(int i=0;i<Q;i++){
			int A,B; cin>>A>>B;
			Map[A][B]=Map[B][A]=1;
		}
		int cont=Euler();
		if((cont==0 || cont==2) && P==con){
			cout<<"Yes"<<endl;
		}
		else cout<<"No"<<endl;
	}
}



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

DFS应用——寻找欧拉回路

【0】README0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 “DFS应用——寻找欧拉回路” 的idea 并用源代码加以实现 (源代码,我还没有找到一种有效的数据结构和D...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2015-11-24 08:16
  • 1311

【离散数学】实验四 图的随机生成及欧拉(回)路的确定

1)实验目的 编程随机生成n个结点的无向图并能进行(半)欧拉图的判定,若是则给出欧拉(回)路。 2)实验要求     对给定n个结点,随机生成邻接矩阵以确定某无向简单图并进行欧拉图和半欧拉图的判定,若...
  • wyh7280
  • wyh7280
  • 2015-12-09 10:45
  • 2373

欧拉回路的求解(dfs和fleury算法)

欧拉回路的求解 欧拉回路的求解主要有两种方法:DFS 搜索及Fleury(佛罗莱)算法。本节分别介绍这两种方法。 DFS 搜索求解欧拉回路 用DFS 搜索思想求解欧拉回路的思路为:利用欧拉定理判断出一...
  • u011466175
  • u011466175
  • 2014-01-29 11:40
  • 5092

CodeForces 91 C.Ski Base(欧拉回路+并查集)

Description一张图,依次将mm条边加入,问迹的数量,迹为经过至少一条边的回路,且经过的每条边只经过一次Input第一行两个整数n,mn,m表示点数和边数,之后mm行每行输入两个整数u,vu,...
  • V5ZSQ
  • V5ZSQ
  • 2017-12-30 11:16
  • 81

HDU - 3018 Ant Trip(欧拉回路一笔画+并查集)

点击打开题目链接 Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/...
  • l1832876815
  • l1832876815
  • 2017-04-19 13:16
  • 374

Colored Sticks POJ - 2513 并查集,字典树,欧拉回路

这道题涉及的知识点比较多 前面的博客是为这道题打基础 步入正题,题意是说给出一堆木棒,每根木棒的左边和右边颜色不一样,求能否将所有的木棒按规则连成一条直线,规则是相连的木棒端点处颜色必须一致。 ...
  • TchChan
  • TchChan
  • 2017-07-26 14:02
  • 111

Uva 10596 - Morning Walk 欧拉回路基础水题 并查集实现【uva数据修改,代码已更新】

题目给出图,要求判断不能一遍走完所有边,也就是无向图,题目分类是分欧拉回路,但其实只要判断度数就行了。 一开始以为只要判断度数就可以了,交了一发WA了。听别人说要先判断是否是联通图,于是用并查集并一起...
  • hcbbt
  • hcbbt
  • 2013-07-12 00:46
  • 1765

poj 2513 Colored Sticks(欧拉回路 并查集 路径压缩 字典树)(困难)

这题不错,用到了三个知识点,我开始没用字典树,超时了。顺便学习了字典树。 看到了一个不错的题解。 可以用图论中欧拉路的知识来解这道题,首先可以把木棒两端看成节点,把木棒看成边,这样相同的颜色就是同一个...
  • kaisa158
  • kaisa158
  • 2015-08-06 21:01
  • 725

hdu1878 欧拉回路(并查集)

hdu1878 欧拉回路(并查集)
  • u012860063
  • u012860063
  • 2014-07-17 19:16
  • 964

HDU1116(欧拉回路+并查集)

先用并查集来判断图是否连通,然后再根据欧拉回路的出度和入度的性质来判断是否为欧拉回路。 关键是建边,我们可以把字符串看成是一条边,首字母为出发点,尾字母为目的点,建边。 #include #in...
  • u011639302
  • u011639302
  • 2014-05-05 22:05
  • 553
    个人资料
    • 访问:120726次
    • 积分:4882
    • 等级:
    • 排名:第6763名
    • 原创:374篇
    • 转载:1篇
    • 译文:0篇
    • 评论:15条
    最新评论