图论&数学:拉姆齐(Ramsey)定理

时间:2021-03-28 18:01:21

拉姆齐(Ramsey)定理是要解决以下的问题:要找这样一个最小的数n,使得n个人中必定有k个人相识或l个人互不相识

我们所知道的结论是这样的

6 个人中至少存在3人相互认识或者相互不认识。

该定理等价于证明这6个顶点的完全图的边,用红、蓝二色任意着色,必然至少存在一个红色边三角形,或蓝色边三角形

HDU6152

给出 n 个人之间的关系,如果其中有三个人互相认识或者互相不认识,则输出 Bad Team! ,否则输出 Great Team!

当人数大于等于 6 时其结果一定是 Bad Team!

而对于 n < 6 的情况,实际上需要求图的最大团点的个数是否大于 3

 #include<cstdio>
#include<cstring>
int n;
int a[][];
int main()
{
int T,t;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(a,,sizeof(a));
for(int i=;i<n;i++)
for(int j=i+;j<=n;j++)
{
scanf("%d",&t);
if(t&&n<) a[i][j]=a[j][i]=;
}
if(n>=)
{
puts("Bad Team!");
continue;
}
int f=;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
for(int k=j+;k<=n;k++)
if(a[i][j]&&a[i][k]&&a[j][k])
{
f=;
break;
}
if(f) puts("Bad Team!");
else puts("Great Team!");
}
return ;
}