nyoj42 一笔画问题

</pre><dd><pre id="sample_output">
 
  
 
  
‘一笔画’即同时满足:1)连通;
                      2)度数为奇数的顶点数为0或2;
至于图的连通,可用并查集。以下代码用数组模拟并查集。
 
  

#include<stdio.h>
#include<string.h>

int s[1003][1007],A;
int main()
{

int a[10000],i,j,n,p,q,bz[10007];
int x,y,X,Y;

scanf("%d",&n);


while(n--)
{
    scanf("%d%d",&p,&q);
A=0;
memset(a,0,sizeof(a));

memset(bz,0,sizeof(bz));
memset(s,0,sizeof(s));
    for(i=0;i<q;i++)
    {
        scanf("%d%d",&x,&y);
    X=-2;Y=-2;
    for(j=0;j<A;j++)
    {
        if(s[j][x]==x&&bz[j]==0)X=j;
        if(s[j][y]==y&&bz[j]==0)Y=j;
    }

    if(X==-2&&Y==-2)
    {
        s[A][y]=y;
        s[A++][x]=x;
    }
    else if(X==-2&&Y!=-2)
    {
     s[Y][x]=x;
    }
      else if(Y==-2&&X!=-2)
    {
     s[X][y]=y;
    }
    else if(Y!=-2&&X!=-2&&X!=Y){
    for(j=1;j<=p;j++)
          if(s[Y][j]==j)
          s[X][j]=j;

bz[Y]=3;
    }





        a[x]++;a[y]++;
    }


    int o=0,g=0;
    for(i=0;i<A;i++)
    if(bz[i]==0)
    g++;
    for(i=1;i<=p;i++)
        if(a[i]%2==1)
          o++;

    if((o==0||o==2)&&g==1)printf("Yes\n");
    else printf("No\n");






}





}

 
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值