#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 510;
int n, m, a, b;
int degree[maxn] = { 0 };
int G[maxn][maxn];
bool vis[maxn] = { 0 };
int sum = 0;
void dfs(int u)
{
vis[u] = 1;
sum++;
for (int v = 2; v <= n; v++)
{
if (vis[v] == 0 && G[u][v] == 1) dfs(v);
}
}
int main()
{
fill(G[0], G[0] + maxn * maxn, 0);
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++)
{
scanf("%d%d", &a, &b);
if (G[a][b] == 0)
{
degree[a]++;
degree[b]++;
G[a][b] = G[b][a] = 1;
}
}
int odd = 0;
for (int i = 1; i <= n; i++)
{
int d = degree[i];
printf("%d", d);
if (i != n) printf(" ");
if (d % 2 != 0) odd++;
}
printf("\n");
dfs(1);
if (sum != n)//注意这里要先判断是不是连通图
{
printf("Non-Eulerian\n");
return 0;
}
if (odd == 0) printf("Eulerian\n");
else if (odd == 2) printf("Semi-Eulerian\n");
else printf("Non-Eulerian\n");
return 0;
}
A1126 Eulerian Path (25 分)
最新推荐文章于 2022-04-25 01:52:32 发布