注意:边数M为0(不连通!),需要特殊判断
#include<stdio.h>
#include<string.h>
int numn,nume;
int gra[210][210];
int d[210];
void dfs(int u)
{
for(int v = 0; v < numn;v++)
{
if(gra[u][v])
{
gra[u][v]--;
gra[v][u]--;
dfs(v);
}
}
}
int main()
{
//
freopen("input.txt","r",stdin);
while(scanf("%d%d",&numn,&nume)==2)
{
memset(gra,0,sizeof(gra));
memset(d,0,sizeof(d));
for(int i = 0; i < nume;i++)
{
int u,v;
scanf("%d%d",&u,&v);
gra[u][v]++;
gra[v][u]++;
d[u]++;
d[v]++;
}
bool flag = true;
for(int i = 0; i < numn;i++)
{
if(d[i]%2)
{
flag=false;
break;
}
}
if(!flag || nume==0)
{
puts("Not Possible");
}
else
{
for(int i = 0; i < numn;i++)
{
if(d[i])
{
dfs(i);
break;
}
}
for(int i = 0; i < numn;i++)
{
for(int j = 0; j < numn;j++)
{
if(gra[i][j])
{
flag = false;
break;
}
}
}
if(!flag)
puts("Not Possible");
else
puts("Possible");
}
}
}