uva 10596 欧拉回路

判断是否存在欧拉回路只要两个条件

图连通,不存在奇度点

注意特判边为0的情况。另外这题数据坑。

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=208;struct fuck{ int u,v,next;}edge[maxn*maxn];int head[maxn];int tol;void init(){ tol=0; memset(head,-1,sizeof(head));}void addedge(int u,int v){ edge[tol].u=u; edge[tol].v=v; edge[tol].next=head[u]; head[u]=tol++;}bool vis[maxn];int du[maxn];void dfs(int u){ int i,v; vis[u]=true; for(i=head[u];i!=-1;i=edge[i].next) {  v=edge[i].v;  if(!vis[v]) dfs(v);  }}bool judge(int n){ for(int i=1;i<=n;i++)  if(du[i]%2) return true; return false;}int main(){ int i,j,n,m,u,v; while(scanf("%d%d",&n,&m)==2) {  init();  memset(du,0,sizeof(du));  u=0;  for(i=1;i<=m;i++)  {   scanf("%d%d",&u,&v);   u++;v++;   du[u]++;du[v]++;   addedge(u,v);   addedge(v,u);  }  memset(vis,false,sizeof(vis));  dfs(u);  bool flag=false;  for(i=1;i<=n;i++)   if(!vis[i]&&du[i]>0)     break; // printf("%d\n",i);  if(i>n) flag=true;  if(!flag||judge(n)||m<2) printf("Not Possible\n");  else printf("Possible\n"); } return 0;}
时间: 2024-12-16 04:11:17

uva 10596 欧拉回路的相关文章

uva 10596 Morning Walk (欧拉回路)

uva 10596 Morning Walk Kamal is a Motashota guy. He has got a new job in Chittagong . So, he has moved to Chittagong from Dinajpur. He was getting fatter in Dinajpur as he had no work in his hand there. So, moving to Chittagong has turned to be a ble

UVA - 10596 - Morning Walk (欧拉回路!并查集判断回路)

UVA - 10596 Morning Walk Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description Problem H Morning Walk Time Limit 3 Seconds Kamal is a Motashota guy. He has got a new job in Chittagong . So, he has moved to Ch

uva 10596 - Morning Walk

Problem H Morning Walk Time Limit 3 Seconds Kamal is a Motashota guy. He has got a new job in Chittagong. So, he has moved to Chittagong from Dinajpur. He was getting fatter in Dinajpur as he had no work in his hand there. So, moving to Chittagong ha

UVa 10596 Moring Walk【欧拉回路】

题意:给出n个点,m条路,问能否走完m条路. 自己做的时候= =三下两下用并查集做了交,WA了一发-后来又WA了好几发--(而且也是判断了连通性的啊) 搜了题解= = 发现是这样的: 因为只要求走完所有的路,即为只需要走完已经给出的路,而并没有要求所走得路上含有所有的点, 比如说 给出的路有这些 0 1 1 2 2 3 3 0 4 4 那么构成的路即为,绕着图中的蓝色线走一圈,即为走完了所有的路, 而4是一个孤立点,也并没有构成路,所以不需要管它 代码中的 if(d[i]!=0)是判断这个点是否

uva 10596 Morning Walk(欧拉回路)

这道题是神坑啊,花了我将近3个小时,本来敲的挺顺的,交上去就是wa,坑点真坑,原来是有的路口交叉点可以没有 路通向它,无语,没有路通向也可以叫交叉点....以后一定得考虑多种情况,用了bfs(vector做的)和dfs判断 的是否连通,判断连通之后只需要再判断是否都有偶数个度就ok了,坑,真坑. bfs代码: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #i

UVA 10054 (欧拉回路) The Necklace

题目:这里 题意:有一种由彩色珠子连接而成的项链,每个珠子两半由不同颜色(由1到50的数字表示颜色)组成,相邻的两个珠子在接触的地方颜色相同,现在有一些零碎的珠子,确认它是否能 复原成完整的项链. 把每种颜色看成一个结点,每个珠子的两半连成一条有向边,就成了判断一个欧拉回路了,而输出回路路线可以用dfs,逆序输出,因为顺序输出的时候,由于可能会有一个结点上多 条边的情况,dfs的时候可能一开始会找到错误的路线再回溯回去,顺序输出就把这段错误的路线也输出了. 1 #include<cstdio>

UVa 10596 清晨漫步

题意:有很多路,问能否每条路只走一遍.恰好回到起点? 思路:无向图的欧拉回路的应用.但是是神坑的一道题~ 注意:考虑下面的数据 Input: 3 2 0 1 1 0 2 2 1 0 1 0 4 4 0 1 1 0 2 3 3 2 5 6 0 1 1 0 2 3 2 3 0 2 2 0 4 6 1 2 2 1 2 3 2 3 3 1 1 3 2 0 Output: Possible Possible Not Possible Possible Possible Not Possible 也就是说,

【紫书】Play on Words UVA - 10129 欧拉回路

题意:给你1e5个字符串,若前一个的末尾字母等于当前的首字母,则可以连在一起(成语接龙一个意思)判断是否可以将他们连在一起 题解:将首位看作点,单词看作边.变成欧拉回路问题. 判断出入度是否相等,再用并查集判一下连通性 (dfs/bfs也行:随便取一个点,搜索一遍.如果每个点都被标记,则是连通的.) ac代码: #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include<stdio.h> #include<a

AOAPC-I: 算法竞赛入门经典 UVa 习题集分类

数据结构基础 UVa 10004 二染色:二部图的判定.(bfs或dfs遍历的过程进行染色,看是否有冲突) UVa 10129 单词:有向图的欧拉道路. UVa 10054 项链:无向图的欧拉回路,首尾相接输出路径. UVa 10596 清晨漫步:无向图的欧拉回路. (对于欧拉道路或回路,在判断连通性等时注意先 if 下要访问的顶点是否出现.)