#include <stdio.h>
#include <string.h>
#include <map>
#include <set>
#include <queue>
#include <string>
#include <algorithm>
using namespace std;
int G[510][510];
bool vis[510];
int degree[510];
int N,M;
int DFS(int now)
{
vis[now]=true;
for(int i=1;i<=N;i++)
{
if(vis[i]==false&&G[now][i]!=0)
{
DFS(i);
}
}
}
bool DFST()
{
int num=0;
for(int i=1;i<=N;i++)
{
if(vis[i]==false)
{
DFS(i);
num++;
}
}
if(num==1)return true;
else return false;
}
int main()
{
scanf("%d%d",&N,&M);
for(int i=0;i<M;i++)
{
int v1,v2;
scanf("%d%d",&v1,&v2);
G[v1][v2]=1;
G[v2][v1]=1;
degree[v1]++;
degree[v2]++;
}
int nume=0,numo=0;
bool flag=DFST();
for(int i=1;i<=N;i++)
{
if(i!=1)printf(" ");
printf("%d",degree[i]);
if(degree[i]%2==0)
{
nume++;
}
else
{
numo++;
}
}
printf("\n");
if(nume==N&&flag)
{
printf("Eulerian\n");
}
else
{
if(numo==2&&flag)
{
printf("Semi-Eulerian\n");
}
else
{
printf("Non-Eulerian\n");
}
}
return 0;
}
PAT甲1126 Eulerian Path(25 分)
最新推荐文章于 2021-07-07 22:38:09 发布