纯欧拉回路的题,连通性以及度数,注意 r==0 时特殊情况的处理(此时应该是Not Possible的) ~
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int p[200+5];
int find(int x)
{
return p[x] == x ? x : find(p[x]);
}
int main()
{
#ifdef state
freopen("sample.txt","r",stdin);
#endif
int n,r,i;
int a[10000+5][3],io[200+5];
while(scanf("%d%d",&n,&r)!=EOF)
{
if(r == 0)
{
printf("Not Possible\n");
continue;
}
int flag = 0;
memset(a,0,sizeof(a));
memset(io,0,sizeof(io));
for(i = 0; i < n; i++)
p[i] = i;
for(i = 0; i < r ; i++)
{
scanf("%d%d",&a[i][0],&a[i][1]);
int p_in = a[i][0] , p_out = a[i][1];
io[p_in]++;
io[p_out]++;
p_in=find(p_in);
p_out=find(p_out);
if(p_in != p_out)
p[p_in] = p_out;
}
int ok = 1;
for(i = 0 ; !io[i] ; i++);
int t = find(i);
for( i++; i <= n ; i++ )
if(io[i] && find(i) != t)
{
ok = 0;
break;
}
if(ok)
for( i = 0; i <= n; i++ )
if( io[i] % 2 )
{
flag = 1;
break;
}
if(flag || !ok)
printf("Not Possible\n");
else
printf("Possible\n");
}
return 0;
}