nyoj-一笔画问题-欧拉图+联通判定

一笔画问题

时间限制:3000 ms  |  内存限制:65535 KB

难度:4

描述

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

思路:1、判断联通,用dfs或并查集都行      2、奇点个数为0或奇点个数为2,则可以一笔,否则需count/2笔

代码:

#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;
vector<int>mp[1005];
int vis[1005];
int num;
void dfs(int x)
{
vis[x]=1;
num++;
for(int i=0;i<mp[x].size();i++)
{
int v=mp[x][i];
if(!vis[v])
dfs(v);
}
}
int main()
{ int n,m,k;
cin>>n;
while(n--)
{
cin>>m>>k;
for(int i=0;i<=m;i++)
if(mp[i].size())
mp[i].clear();
int a,b;
for(int i=0;i<k;i++)
{
scanf("%d%d",&a,&b);
mp[a].push_back(b);
mp[b].push_back(a);
}
num=0;
int t=0;
for(int i=1;i<=m;i++)
if(mp[i].size()%2)
t++;
memset(vis,0,sizeof(vis));
dfs(b);
if(num==m&&(t==0||t==2))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;

}
return 0;
}

时间: 2024-11-02 14:54:22

nyoj-一笔画问题-欧拉图+联通判定的相关文章

Nyoj 一笔画问题(图论)

描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画. 输入 第一行只有一个正整数N(N<=10)表示测试数据的组数.每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线.(点的编号从1到P)随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线. 输出 如果存在符合条件的连线,则

nyoj 一笔画问题 (判断欧拉路径)

无向图判断欧拉路径只要: 1.图为连通图(并查集处理) 2.奇数度为0或2 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<string> 6 #include<queue> 7 #include<algorithm> 8 #include<map> 9 #include<

hdu5883:The Best Path 欧拉图的性质和应用

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5883 题目大意: 给定 n 个点, m 条边的图,每个点有权值,求所给图是否是欧拉图, 如果是, 求出所经过点的权值做异或运算的最大值. 吐槽:这题给的数据竟然不用判断是否联通,坑了我几发MLE,不过也骗过啦 题目思路:首先异或运算满足交换律,所以与点的遍历顺序无关. 其次,对于欧拉图的判定,奇数度的结点个数为0是欧拉回路,为2是欧拉通路. 然后,没经过一个点,该点的度数减去2,所以可以判断出一个点

【BZOJ-3033】太鼓达人 欧拉图 + 暴搜

3033: 太鼓达人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 204  Solved: 154[Submit][Status][Discuss] Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和lydrainbowcat拯救出来的的applepi.看到两人对太鼓达人产生了兴趣,applepi果断闪

[BZOJ3033]太鼓达人|欧拉图

Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和lydrainbowcat拯救出来的的applepi.看到两人对太鼓达人产生了兴趣,applepi果断闪人,于是cl拿起鼓棒准备挑战.然而即使是在普通难度下,cl的路人本性也充分地暴露了出来.一曲终了,不但没有过关,就连鼓都不灵了.Vani十分过意不去,决定帮助工作人员修鼓. 鼓的主要元件是M个围成一圈

欧拉图和哈密顿图

欧拉图和哈密顿图 觉得有用的话,欢迎一起讨论相互学习~Follow Me 通路和回路 给定图G<V,E>中结点和边相继交错出现的序列,其中V表示图中结点集合,E表示图中边的集合 \[\Gamma=v_0e_1v_1e_2v_2...e_kv_k\] 若\(\Gamma\)中边\(e_i\)的两个端点是\(v_{i-1}\)和\(v_i\) (==G是有向图时要求\(v_{i-1}与v_{i}分别是e_{i}的起始点和终点\)==),i=1,2,3,...k,则称\(\Gamma为结点v_0到结

欧拉回路总结

1.基本概念: 图G为连通图,若图G中存在一条路径经过每条边一次且仅一次,那么这条路径为欧拉路,若这条路径的起点与终点相同,那么为欧拉回路.欧拉回路是欧拉路的特例. 存在欧拉回路的图称为欧拉图.欧拉路以及欧拉回路常用于解决一笔画问题. 2.判定条件. 无向图: 1).欧拉路: ①图连通,可用并查集判定: ②度数为奇数的结点为2个.(一个作起点,一个作终点) 2)欧拉回路: ①图连通 ②度数为奇数的结点为0个 有向图: 1)欧拉路: ①图连通,dfs+vis[] ②起点的出度比入度大1,终点的入度

【思路整理】六道题的一些思路分析总结。。

噗...这几道题题很简单..实现起来也挺简单的..但是... 虽然最终的solution很简单..但是如何想出这个solution和如何实现这个问题(实现中的细节)也是要考虑的.... 恩..在这里说一说拿到一道题的分析历程吧顺带总结一下(?).. ------------------------------------------------------- POJ 2337 Catenyms 欧拉回路 Description:给你n个单词,让每个单词的最后一个字母恰好等于下一个单词的第一个字母

十一、图论

11.1 图的基本概念 图是一种网状的数据结构,其中的结点之间的关系是任意的,即图中任何两个结点之间都可能直接相关. 顶点:图中的数据元素.设它的集合用V(Vertex)表示. 边:顶点之间的关系的集合用E(edge)来表示: 顶点的度:连接顶点的边的数量称为该顶点的度.顶点的度在有向图和无向图中具有不同的表示. 对于无向图,一个顶点V的度比较简单,其是连接该顶点的边的数量,记为D(V). 对于有向图要稍复杂些,根据连接顶点V的边的方向性,一个顶点的度有入度和出度之分. 入度是以该顶点为端点的入