• Graph Theory HDU


    Little Q loves playing with different kinds of graphs very much. One day he thought about an interesting category of graphs called ``Cool Graph'', which are generated in the following way: 
    Let the set of vertices be {1, 2, 3, ..., nn}. You have to consider every vertice from left to right (i.e. from vertice 2 to nn). At vertice ii, you must make one of the following two decisions: 
    (1) Add edges between this vertex and all the previous vertices (i.e. from vertex 1 to i1i−1). 
    (2) Not add any edge between this vertex and any of the previous vertices. 
    In the mathematical discipline of graph theory, a matching in a graph is a set of edges without common vertices. A perfect matching is a matching that each vertice is covered by an edge in the set. 
    Now Little Q is interested in checking whether a ''Cool Graph'' has perfect matching. Please write a program to help him. 

    InputThe first line of the input contains an integer T(1T50)T(1≤T≤50), denoting the number of test cases. 
    In each test case, there is an integer n(2n100000)n(2≤n≤100000) in the first line, denoting the number of vertices of the graph. 
    The following line contains n1n−1 integers a2,a3,...,an(1ai2)a2,a3,...,an(1≤ai≤2), denoting the decision on each vertice.
    OutputFor each test case, output a string in the first line. If the graph has perfect matching, output ''Yes'', otherwise output ''No''. 
    Sample Input

    3
    2
    1
    2
    2
    4
    1 1 2

    Sample Output

    Yes
    No
    No

    Graph Theory

     HDU - 6029 

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<utility>
    #include<set>
    #include<vector>
    #include<map>
    #include<queue>
    #include<stack>
    #define maxn 110
    #define INF 0x3f3f3f3f
    #define LL long long
    #define ULL unsigned long long
    #define E 1e-8
    #define mod 100000000
    using namespace std;
    #define raf(i,k,n) for(int i=k;i<=n;i++)
    //Oo0Oooo00ooOoo00oO
    int a[100005];
    int main()
    {
        int t,n,i,j,s,flag;
        cin>>t;
        while(t--)
        {
            memset(a,0,sizeof(a));
            s=0,flag=1;
            cin>>n;
            for(i=1; i<n; i++)  cin>>a[i];
            if(n%2!=0){cout<<"No"<<endl; continue;}
            for(i=n-1; i>=0; i--)
            {
                if(a[i]==1) s++;
                else
                {
                    s--;
                    if ( s < 0 ) {flag=0;break;}
                }
            }
            if(flag)
                cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
    }
    
    
    
    
    
  • 相关阅读:
    面向对象-01
    网络编程-02-客户端搭建
    网络编程-01-服务端搭建
    日志-02
    日志-01
    md5加密
    shell 第五天
    shell第四天
    shell第三天
    shell
  • 原文地址:https://www.cnblogs.com/upstart/p/8982344.html
Copyright © 2020-2023  润新知