HDU 6152-Ramsey拉姆齐二染色定理

题意

一个团队是好的团队,当且仅当任意三个人既不互相认识也不互相不认识。

分析

命题

对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!
");
        }
        else{
            printf(ac()?"Great Team!
":"Bad Team!
");
        }
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/shuiming/p/7398665.html