Graph Theory HDU - 6029 留着练英语

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;
    }
}

 


posted @ 2018-05-02 20:38  zhang_upstar  阅读(339)  评论(0编辑  收藏  举报