Graph Theory
Posted happy_code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Graph Theory相关的知识,希望对你有一定的参考价值。
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 140 Accepted Submission(s): 74
Problem 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≤T≤50), denoting the number of test cases.
In each test case, there is an integer n(2≤n≤100000) in the first line, denoting the number of vertices of the graph.
The following line contains n−1 integers a2,a3,...,an(1≤ai≤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
Sample Output
Yes
No
No
// 题意很难懂啊。。。一个 1-n 长,为 n 的一排点,对于每一个点,从左到右,有两种操作中的一个 (1)对于之前的点,每个连条边 (2)什么都不做
问是否存在一个边的集合,所有点两个一组相连,没有孤立点。
题解:很奇怪的一个题,就是不太懂题意,懂了的话还是很简单的。
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 using namespace std; 5 #define MX 100005 6 7 int n; 8 int data[MX]; 9 10 int main() 11 { 12 int T; 13 cin>>T; 14 while (T--) 15 { 16 scanf("%d",&n); 17 for (int i=2;i<=n;i++) 18 scanf("%d",&data[i]); 19 if (n%2) 20 { 21 printf("No\n"); 22 continue; 23 } 24 int ok = 1; 25 int cnt = 0; 26 for (int i=n;i>=2;i--) 27 { 28 if (data[i]==1) cnt++; 29 else cnt--; 30 if (cnt<0) 31 { 32 ok=0; 33 break; 34 } 35 } 36 if (ok) 37 printf("Yes\n"); 38 else 39 printf("No\n"); 40 } 41 return 0; 42 }
以上是关于Graph Theory的主要内容,如果未能解决你的问题,请参考以下文章
Graph Theory: Representation and Algorithms
CS224W摘要09.Theory of Graph Neural Networks