UVA 10596 Morning Walk

UVA_10596

这个题目就是一个纯欧拉回路的问题,具体理论可以参考刘汝佳白书P112,如果这个图是连通的,并且每个点只与偶数条路相连,那么一定存在欧拉回路。于是,我们只要去判断图是否连通,以及每个点所连的路的数量即可。

一开始我没有注意存在R=0的情况,RE了很多次,而且R=0时一定要输出Not Possible,但不管怎么说,存在路的交点但不存在任何一条路确实是比较诡异的……

#include<stdio.h>
#include
<string.h>
int dgr[210],p[210];
int find(int x)
{
return p[x]==x?x:(p[x]=find(p[x]));
}
int main()
{
int i,j,u,v,N,R,ok,num;
while(scanf("%d%d",&N,&R)!=EOF)
{
if(R==0)
{
printf(
"Not Possible\n");
continue;
}
memset(dgr,
0,sizeof(dgr));
for(i=0;i<N;i++)
p[i]
=i;
for(i=0;i<R;i++)
{
scanf(
"%d%d",&u,&v);
if(find(u)!=find(v))
p[find(u)]
=find(v);
dgr[u]
++;
dgr[v]
++;
}
ok
=1;
for(i=0;!dgr[i];i++);
for(j=i+1;j<N;j++)
if(dgr[j]&&find(i)!=find(j))
{
ok
=0;
break;
}
num
=0;
if(ok)
for(i=0;i<N;i++)
if(dgr[i]%2!=0)
num
++;
if(!ok||num>0)
printf(
"Not Possible\n");
else
printf(
"Possible\n");
}
return 0;
}

  

你可能感兴趣的:(uva)