NYOJ 42
#include<stdio.h>
#include<string.h>
int map[1050][1050],vis[1050],chu[1050];
int P,Q;
void dfs(int point)
{
int i;
vis[point]=1;//DFS 深度遍历
for(i=1;i<=P;i++)
if(map[point][i]!=0)
{
chu[point]++;
if(vis[i]==0)
dfs(i);
}
}
int main()
{
int i,j,N;
scanf("%d",&N);
while(N--)
{
int a,b;
int all_vis=1;
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
memset(chu,0,sizeof(chu));
scanf("%d %d",&P,&Q);
for(i=0;i<Q;i++)
{
scanf("%d %d",&a,&b);
map[a][b]=1;
map[b][a]=1;
}
dfs(1);
for(i=1;i<P;i++)
{
if(vis[i]==0)
{
all_vis=0;
break;
}
}
if(all_vis==0) printf("No\n");
else
{
j=0;
for(i=1;i<=P;i++)
if(chu[i]%2==1) j+=1;//欧拉图 度为奇数
if(j==0||j==2) printf("Yes\n");
else printf("No\n");
}
}
}