题目链接:点击打开链接
代码:
#include<stdio.h>
#include<string.h>
int q[2010],q1[2010],a;
int zhaodie(int a)
{
while(q[a]!=a)
{
a=q[a];
}
return a;
}
void merge1(int a2,int b2)
{
int a1=zhaodie(a2);
int b1=zhaodie(b2);
if(a1!=b1)
{
q[a1]=b1;
for(int i=1; i<=a; i++)
if(q[i]==a2||q[i]==a1)
q[i]=b1;
}
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int b;
// memset(q,0,sizeof(q));
memset(q1,0,sizeof(q1));
scanf("%d%d",&a,&b);
for(int i=1; i<=a; i++)
q[i]=i;
int w1,w2;
for(int i=0; i<b; i++)
{
scanf("%d%d",&w1,&w2);
merge1(w1,w2);
q1[w1]++;
q1[w2]++;
}
int e=q[1];
int flag=0;
for(int i=2; i<=a; i++)
{
if(q[i]!=e)
{
flag=1;
break;
}
}
int sum=0;
for(int i=1; i<=a; i++)
{
if(q1[i]&1)
sum++;
}
if((sum==0||sum==2)&&!flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
首先图要连通,其次度数为奇数的点的个数为0或
2,则必然能一笔画完(无向图)