hdu6152 拉姆齐定理
Posted 掉血菜鸡煮熟中
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu6152 拉姆齐定理相关的知识,希望对你有一定的参考价值。
hdu6152 Friend-Graph
题意:给出 n 个人的关系,问是否有 3 个人两两是朋友,或 3 个人两两不是朋友。
tags:n>=6的就不是,< 的暴力枚举。
拉姆齐定理的通俗表述:
6 个人中至少存在3人相互认识或者相互不认识。
该定理等价于证明这6个顶点的完全图的边,用红、蓝二色任意着色,必然至少存在一个红色边三角形,或蓝色边三角形。
#include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f #define MP make_pair #define PB push_back #define fi first #define se second typedef long long ll; const int N = 3005; int n, a1[N], a2[N], t1, t2, G[10][10]; int main() { int T; scanf("%d", &T); int n, aij; while(T--) { mes(G, 0); scanf("%d", &n); rep(i,1,n-1) { rep(j,1,n-i) { scanf("%d", &aij); if(n<6 && aij==1) G[i][j+i]=G[j+i][i]=1; } } if(n>=6) { puts("Bad Team!"); continue; } bool flag=0; rep(i,1,n) { t1=0, t2=0; rep(j,1,n) if(j!=i) { if(G[i][j]) a1[++t1]=j; else a2[++t2]=j; } rep(j,1,t1) rep(l,j+1,t1) { if(G[a1[j]][a1[l]]) { flag=1; break; } } rep(j,1,t2) rep(l,j+1,t2) { if(G[a2[j]][a2[l]]==0) { flag=1; break; } } } puts(flag ? "Bad Team!" : "Great Team!"); } return 0; }
以上是关于hdu6152 拉姆齐定理的主要内容,如果未能解决你的问题,请参考以下文章
[HDOJ6152] Friend-Graph(拉姆齐定理)