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


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

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

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

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

    HDU6152

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

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

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

     1 #include<cstdio>
     2 #include<cstring>
     3 int n;
     4 int a[10][10];
     5 int main()
     6 {
     7     int T,t;
     8     scanf("%d",&T);
     9     while(T--)
    10     {
    11         scanf("%d",&n);
    12         memset(a,0,sizeof(a));
    13         for(int i=1;i<n;i++)
    14             for(int j=i+1;j<=n;j++)
    15             {
    16                 scanf("%d",&t);
    17                 if(t&&n<6) a[i][j]=a[j][i]=1;
    18             }
    19         if(n>=6)
    20         {
    21             puts("Bad Team!");
    22             continue;
    23         }
    24         int f=0;
    25         for(int i=1;i<=n;i++)
    26         for(int j=i+1;j<=n;j++)
    27         for(int k=j+1;k<=n;k++)
    28             if(a[i][j]&&a[i][k]&&a[j][k])
    29             {
    30                 f=1;
    31                 break;
    32             }
    33         if(f) puts("Bad Team!");
    34         else puts("Great Team!");
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    玩游戏(dfs)
    Find them, Catch them(并查集)
    Shredding Company(dfs)
    Sudoku(dfs)
    Network Saboteur(dfs)
    棋盘问题(dfs)
    Curling 2.0(dfs)
    A Knight's Journey(dfs)
    15. 3Sum
    12. Integer to Roman
  • 原文地址:https://www.cnblogs.com/aininot260/p/9584219.html
Copyright © 2020-2023  润新知