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;
}