题意
一个团队是好的团队,当且仅当任意三个人既不互相认识也不互相不认识。
分析
命题
对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; }
时间: 2024-10-15 03:15:28