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

  

时间: 2024-10-15 03:15:28

HDU 6152-Ramsey拉姆齐二染色定理的相关文章

拉姆齐定理

1.暴力 4人两两不是朋友,则其中3人两两必定不是朋友 #include<iostream> #include<cstdio> #include<vector> #include<set> #include<map> #include<string.h> #include<cmath> #include<algorithm> #include<queue> #define LL long long

[HDOJ6152] Friend-Graph(拉姆齐定理)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6152 拉姆齐定理,R(3,3)=6,说明6个人以上的时候,一定会存在规模为3的团或者3个团. 所以暴力枚举6点以下的结果,其余bad就好.不小心mle了几发. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 11; 5 int n; 6 int G[maxn][maxn]; 7 8 int main()

hdu6152 拉姆齐定理

hdu6152    Friend-Graph 题意:给出 n 个人的关系,问是否有 3 个人两两是朋友,或 3 个人两两不是朋友. tags:n>=6的就不是,< 的暴力枚举. 拉姆齐定理的通俗表述: 6 个人中至少存在3人相互认识或者相互不认识. 该定理等价于证明这6个顶点的完全图的边,用红.蓝二色任意着色,必然至少存在一个红色边三角形,或蓝色边三角形. #include<bits/stdc++.h> using namespace std; #pragma comment(l

hdu 5285 wyh2000 and pupil(二染色)

第一次用vector解得题,值得纪念,这道题是二染色问题,我用bfs解得,就是染色,判断,计数问题,其 实挺简单的,就是得判一下特殊情况,当n<2的时候就不能有解,因为题目要求每个组至少有一个人,当没有不认识的 人的时候就是一个组是n-1,另一个组人数为1 上代码: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<vector

NOIP2010关押罪犯 二分+二染色

这个题一上来 没有思路,后来想没有思路就二分吧 那么我们来二分 首先,大于当前的mid值的关系,不能出现在一个集合里 (即关系形成的图是一个二分图,判定二分图可以二染色) 如果不能形成二分图,那么说明有些关系要在一个集合里,那就向上二分 否则向下二分 #include<cstdio> #include<cstring> #include<queue> #include<set> #include<cstdlib> #include<algo

HDU 4704 Sum( 费马小定理 )

HDU 4704 Sum( 费马小定理 ) 理解能力果然拙计,,题目看半天没懂什么意思. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; #define MOD 1000000007 char str[100010]; LL fast_mod( LL a, int b) { LL res = 1; while( b )

HDU 4901 The Romantic Hero(二维dp)

题目大意:给你n个数字,然后分成两份,前边的一份里面的元素进行异或,后面的一份里面的元素进行与.分的时候按照给的先后数序取数,后面的里面的所有的元素的下标一定比前面的大.问你有多上种放元素的方法可以使得前面异或的值和后面与的值相等. dp[x][y] 表示走到第x步,得到y这个数字一共有多少种方法. 但是需要注意这里得分一下,不能直接用dp数组存种数,你需要分一下从上一层过来的次数,和这一层自己可以到达的次数.然后取和的时候前后两个集合的种数进行乘法,注意边乘边取余. 顺便给一组数据: 4 3

HDU 1698 线段树(区间染色)

Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16255    Accepted Submission(s): 8089 Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing f

HDU 4349 Xiao Ming&#39;s Hope lucas定理

Xiao Ming's Hope Time Limit:1000MS     Memory Limit:32768KB Description Xiao Ming likes counting numbers very much, especially he is fond of counting odd numbers. Maybe he thinks it is the best way to show he is alone without a girl friend. The day 2