//2628803 2011-08-15 19:06:51 Accepted 3321 C 0 160 ylwh@Unknown
#include <stdio.h>
#include <string.h>
int main()
{
int n, m, i, j, k, now, map[25][25], flag, ans;
while(scanf("%d%d", &n, &m)!=EOF)
{
memset(map, 0, sizeof(map));
for(i=0; i<m; i++)
{
scanf("%d%d", &j, &k);
map[j][k] = map[k][j] = 1;
}
if(n!=m)//如果可以构成一个圆,必然有n=m;
{
printf("NO\n");
continue;
}
ans = 0;
now = 1;
for(j=1; j<=m; j++)
{
flag = 0;
for(i=1; i<=n; i++)//从点1开始循环,如果最后可以回到点1,就说明是一个圆
if(map[now][i])
{
map[now][i] = map[i][now] = 0;//删掉已找到的边
now = i;
flag = 1;
break;
}
if(flag == 0)//如果,没有找到就说明有分支
{
ans = -1;
break;
}
}
if(now != 1)
ans = -1;
if(ans == 0)
printf("YES\n");
if(ans == -1)
printf("NO\n");
}
return 0;
}
ZOJ 3321 Circle【模拟】
最新推荐文章于 2021-08-04 15:15:41 发布