Hrbust1658一笔画

来源:互联网 发布:mac照片占用空间 编辑:程序博客网 时间:2024/06/02 14:57
一笔画Time Limit: 1000 MSMemory Limit: 32768 KTotal Submit: 70(26 users)Total Accepted: 24(22 users)Rating: Special Judge: NoDescription判断一个图是否能够用一笔画下来.规定,所有的边都只能画一次,不能重复画。Input
第一行只有一个正整数N(N<=10)表示测试数据的组数。
每组测试数据的第一行有两个正整数P,Q(P<=100,Q<=100),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)
随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。
Output
如果存在符合条件的连线,则输出"Yes",
如果不存在符合条件的连线,输出"No"。
Sample Input

2

4 3

1 2

1 3

1 4

4 5

1 2

2 3

1 3

1 4

3 4

Sample Output

No

Yes

很裸的欧拉图问题 ,题解在代码中

#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
#include <stack>
#include <algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define mem(a) memset(a, 0, sizeof(a))
#define eps 1e-5
#define M 100005
#define INF 0x3f3f3f3f
using namespace std;
//无向的欧拉图或者半欧拉图。 欧拉图:所有点的度为偶数。半欧拉图,起点和终点的度为奇数。
int a,b,aa,bb;
int f[M];
int pre[M];
int find(int x)
{
    int r=x;
    while(r!=pre[r])
    {
        r=pre[r];
    }
    return r;
}
int mx(int x,int y)
{
    int xx=find(x);
    int yy=find(y);
    if(xx!=yy)
    {
        pre[xx]=yy;
    }
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        mem(f);
        mem(pre);
     cin>>a>>b;
       for(int i=1;i<=a;i++)
       {
           pre[i]=i;
       }
        for(int i=0;i<b;i++)
        {
            cin>>aa>>bb;
            f[aa]++;
            f[bb]++;
            mx(aa,bb);
        }
        int flag=0;
        for(int i=1;i<=a;i++)
        {
            if(pre[i]==i)
            {
                flag++;
            }
        }
        if(flag!=1)//前提:图连通
            cout<<"No"<<endl;
        else
        {
            int sum=0;
            for(int i=1;i<=a;i++)
            {
                if(f[i]%2==1)
                {
                    sum++;
                }
            }
            if(sum==0||sum==2)
            {
                cout<<"Yes"<<endl;
            }
            else
                cout<<"No"<<endl;
    }
}
}

0 0