hdu6152 拉姆齊定理
阿新 • • 發佈:2017-08-22
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) #defineper(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 拉姆齊定理