题意
一个团队是好的团队,当且仅当任意三个人既不互相认识也不互相不认识。
分析
命题
对6个点的完全图$K_6$,任意进行红、蓝两色着色,都存在一个红色三角形或者蓝色三角形,且至少有两个同色三角形。
这样就可以把非朋友关系看成红边,朋友关系看成蓝边,六个人一定不是好的团队。
n<=2时一定是Great Team
n>=6时一定是Bad Team
3<=n<=5时暴力一下
代码
#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <ctime>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define MAX 1000007
#define MAXN 10007
#define MAXM 20007
#define INF 0x3f3f3f3f
#define NINF 0xc0c0c0c0
#define MOD 1000000007
using namespace std;
typedef long long LL;
int M[10][10],n;
bool ac(){
if(n<3)return true;
for(int i=1;i<n-1;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<=n;k++){
if(M[i][k]&M[j][k]&M[i][j])return false;
if(!(M[i][j]|M[i][k]|M[j][k]))return false;
}
}
}
return true;
}
int main(){
int cas,x;
scanf("%d",&cas);
while(cas--){
scanf("%d",&n);
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
scanf("%d",&x);
if(n<6)M[i][j]=x;
}
}
if(n>=6){
printf("Bad Team!\n");
}
else{
printf(ac()?"Great Team!\n":"Bad Team!\n");
}
}
return 0;
}