1. 程式人生 > >hdu6152 拉姆齊定理

hdu6152 拉姆齊定理

rep amp 至少 namespace flag fine link size 三角形

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 拉姆齊定理