Graph Theory

Description

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, ..., $n$}. You have to consider every vertice from left to right (i.e. from vertice 2 to $n$). At vertice $i$, 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 $i-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.
 

Input

The first line of the input contains an integer $T(1\leq T\leq50)$, denoting the number of test cases.
In each test case, there is an integer $n(2\leq n\leq 100000)$ in the first line, denoting the number of vertices of the graph.
The following line contains $n-1$ integers $a_2,a_3,...,a_n(1\leq a_i\leq 2)$, denoting the decision on each vertice.
 

Output

For 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
题解:一个 1-n 长,为 n 的一排点,对于每一个点,从左到右,有两种操作中的一个 (1)对于之前的点,每个连条边 (2)什么都不做,题意太模糊,应该是可以连接任意的两点之间,为保证每个点都有一条边,构成应该为(。-。。-。。-。。-。),这样就满足了题意。
代码如下:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MX 100005
int n;
int data[MX];
int main()
{
    int T;
    cin>>T;
    while (T--)
    {
        scanf("%d",&n);
        for (int i=2;i<=n;i++)
            scanf("%d",&data[i]);
        if (n%2)
        {
            printf("No\n");
            continue;
        }
        int ok = 1;
        int cnt = 0;
        for (int i=n;i>=2;i--)
        {
            if (data[i]==1) cnt++;
            else cnt--;
            if (cnt<0)
            {
                ok=0;
                break;
            }
        }
        if (ok)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}
阅读更多
个人分类: 水题集
想对作者说点什么? 我来说一句

graph theory with applications 中文版

2009年03月20日 7.96MB 下载

Spectral Graph Theory(Chung)

2011年09月21日 6.49MB 下载

Introduction to Graph Theory

2010年03月20日 227KB 下载

没有更多推荐了,返回首页

不良信息举报

Graph Theory

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭