比较简单的欧拉回路判定,只是需要特殊处理下输入
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=1001;
char str[maxn];
int n,m,cnt[31];
int main()
{
while(gets(str)!=NULL)
{
if(!strcmp(str,"ENDOFINPUT"))
break;
sscanf(str,"%*s%d%d",&m,&n);
memset(cnt,0,sizeof(cnt));
int ans=0;
for(int i=0;i<n;i++)
{
gets(str);
int k=0,j;
while(sscanf(str+k,"%d",&j)==1)
{
ans++;
cnt[i]++;
cnt[j]++;
while(str[k]&&str[k]==' ')k++;
while(str[k]&&str[k]!=' ')k++;
}
}
gets(str);
int odd=0,even=0;
for(int i=0;i<n;i++)
{
if(cnt[i]&1)
odd++;
else
even++;
}
if(!odd&&!m)
printf("YES %d\n",ans);
else if(odd==2&&(cnt[m]&1)&&(cnt[0]&1)&&m)
printf("YES %d\n",ans);
else
printf("NO\n");
}
return 0;
}