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

本文介绍了一个判定团队是否为“好团队”的算法。该算法通过构建完全图并进行颜色着色来判断由n个人组成的团队是否满足特定条件。当n小于等于2时,团队总是好团队;当n大于等于6时,团队必定不是好团队;对于n介于3到5的情况,则通过具体计算来判断。

题意

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

分析

命题

对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;
}

  

转载于:https://www.cnblogs.com/shuiming/p/7398665.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值