题解 - [HDU 6152] Friend-Graph

题目链接

原始题面

Problem Description

It is well known that small groups are not conducive of the development of a team. Therefore, there shouldn’t be any small groups in a good team

In a team with n members,if there are three or more members are not friends with each other or there are three or more members who are friends with each other. The team meeting the above conditions can be called a bad team.Otherwise,the team is a good team

A company is going to make an assessment of each team in this company. We have known the team with n members and all the friend relationship among these n individuals. Please judge whether it is a good team

Input

The first line of the input gives the number of test cases \(T\); \(T\) test cases follow.(\(T<=15\)) The first line od each case should contain one integers \(n\), representing the number of people of the team.(\(n≤3000\))

Then there are \(n-1\) rows. The ith row should contain \(n-i\) numbers, in which number \(a_{ij}\) represents the relationship between member \(i\) and member \(j+i\). \(0\) means these two individuals are not friends. \(1\) means these two individuals are friends

Output

Please output "Great Team!" if this team is a good team, otherwise please output "Bad Team!"

Sample Input

1
2
3
4
5
1
4
1 1 0
0 0
1

Sample Output

1
Great Team!

Source

2017 中国大学生程序设计竞赛 - 网络选拔赛

Recommend

liuyiding

题意简述

给出 \(n\) 个人组成的团队的关系图,两个点有边连接代表这两个人互相认识,否则代表两人不认识

如果其中有三个人互相认识或互相不认识则称其为坏团队,否则称其为好团队

判断给出的团队是好团队还是坏团队

解题思路

  • 由 Ramsey 定理,当 \(n\geqslant 6\) 时,其必然为坏团队
  • \(n=5\) 时,只有当每个结点的度为 \(2\) 时才是好团队,否则是坏团队
  • \(n=4\) 时,只要有一个结点的度为 \(3\)\(0\) 时就是坏团队,否则是好团队
  • \(n=3\) 时,只要所有结点的度均为 \(2\) 或均为 \(0\) 时就是坏团队,否则是好团队
  • \(n\leqslant 2\) 时,其必然为好团队

代码参考

Show code

HDU_6152view raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
* @Author: Tifa
* @Description: From <https://github.com/Tiphereth-A/CP-archives>
* !!! ATTENEION: All the context below is licensed under a
* GNU Affero General Public License, Version 3.
* See <https://www.gnu.org/licenses/agpl-3.0.txt>.
*/
#include <cstdio>
#include <cstring>
int deg[10];
int main() {
int kase;
scanf("%d", &kase);
while (kase--) {
memset(deg, 0, sizeof(deg));
int n;
scanf("%d", &n);
if (n >= 6) {
puts("Bad Team!");
for (int i = 1; i < n; ++i)
for (int j = i + 1; j <= n; ++j) scanf("%*d");
continue;
}
int _;
for (int i = 1; i < n; ++i)
for (int j = i + 1; j <= n; ++j) {
scanf("%d", &_);
if (_) {
++deg[i];
++deg[j];
}
}
switch (n) {
case 5:
if (deg[1] == 2 && deg[2] == 2 && deg[3] == 2 && deg[4] == 2 &&
deg[5] == 2)
puts("Great Team!");
else puts("Bad Team!");
break;
case 4:
if (deg[1] == 3 || deg[1] == 0 || deg[2] == 3 || deg[2] == 0 ||
deg[3] == 3 || deg[3] == 0 || deg[4] == 3 || deg[4] == 0)
puts("Bad Team!");
else puts("Great Team!");
break;
case 3:
if ((deg[1] == 2 && deg[2] == 2 && deg[3] == 2) ||
(deg[1] == 0 && deg[2] == 0 && deg[3] == 0))
puts("Bad Team!");
else puts("Great Team!");
break;
default: puts("Great Team!");
}
}
}