题意:
有一个队伍,如果队伍里有三个或三个以上的人互相认识 或者队伍里有三个或三个以上的人互相不认识,那么这个队伍为bad team, 否则为great team。
分析:
题目给出的时间充足,直接暴力一遍,复杂度O(n3)。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include <iostream>
using namespace std;
bool a[3005][3005];
int n;
bool dfs()
{
bool flag = true;
for(int i = 1; i <= n; i++)
{
for(int j = i+1; j <= n; j++)
{
if(a[i][j] == 1)
{
for(int j2 = j+1; j2 <= n; j2++)
{
if(a[j][j2] == 1)
{
if(a[j2][i] == 1) {flag = false; return false;}
}
}
}
}
}
for(int i = 1; i <= n; i++)
{
for(int j = i+1; j <= n; j++)
{
for(int k = j+1; k <= n; k++)
{
if(!a[i][j] && !a[i][k] && !a[j][k])
{flag = false; return false;}
}
}
}
return true;
}
int main()
{
int t; cin >> t;
while(t--)
{
cin >> n;
int n2 = n;
memset(a, 0, sizeof(a));
for(int i = 1; i < n; i++)
{
for(int j = i+1; j <= n2; j++)
{
int w; cin >> w;
a[i][j] = w;
a[j][i] = w;
}
}
if(dfs()) cout << "Great Team!" << endl;
else cout << "Bad Team!" << endl;
}
return 0;
}