zoukankan      html  css  js  c++  java
  • HDU 6152

    Friend-Graph

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 3072    Accepted Submission(s): 1334

    Problem Description
    It is well known that small groups are not conducive of the development of a team. Therefore, there shouldn’t be any small groups in a good team.
    In a team with n members,if there are three or more members are not friends with each other or there are three or more members who are friends with each other. The team meeting the above conditions can be called a bad team.Otherwise,the team is a good team.
    A company is going to make an assessment of each team in this company. We have known the team with n members and all the friend relationship among these n individuals. Please judge whether it is a good team.
    Input
    The first line of the input gives the number of test cases T; T test cases follow.(T<=15)
    The first line od each case should contain one integers n, representing the number of people of the team.(n3000)

    Then there are n-1 rows. The ith row should contain n-i numbers, in which number aij represents the relationship between member i and member j+i. 0 means these two individuals are not friends. 1 means these two individuals are friends.
    Output
    Please output ”Great Team!” if this team is a good team, otherwise please output “Bad Team!”.
    Sample Input
    1 4 1 1 0 0 0 1
    Sample Output
    Great Team!
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    bool a[3005][3005];
    int main()
    {    int T;
        scanf("%d",&T);
        while(T>0){
            int flag=1;
            int N;
            scanf("%d",&N);
            for(int i=0;i<N;i++){
                for(int j=0;j<N;j++){
                    a[i][j]=0;
                }
            }
            for(int b=0;b<N;b++)
                for(int d=b+1;d<N;d++){
                    scanf("%d",&a[b][d]);
                    a[d][b]=a[b][d];
                }
            for(int c=0;c<N;c++)
                for(int q=c+1;q<N;q++)
                    for(int k=q+1;k<N;k++){
                        int ans=a[c][q]+a[q][k]+a[c][k];
                        if(ans==3||ans==0){
                            flag=0;
                            c=N;
                            q=N;
                            break;
                        }
                    }
            if(flag) printf("Great Team!
    ");
            else printf("Bad Team!
    ");
    
        T--;
        }
        return 0;
    }
    1、这个二维数组a只能用bool定义,用int定义会超,bool只占一个字节
    2、bool的取值、和int可以直接相互转换
    3、用ans把三个取值加起来,会比直接比较精简
    4、注意三个for那里的q、k初始化的值
     
    改进:
    根据Ramsey定理(组合数学的知识),因为当人数大于等于6时,答案一定是否,所以,可以大大缩小空间
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    bool a[5][5];
    int main()
    {    int T;
        scanf("%d",&T);
        while(T>0){
            int flag=1;
            int N;
            scanf("%d",&N);
            if(N>5){
                flag=0;
            }else{
            for(int i=0;i<N;i++){
                for(int j=0;j<N;j++){
                    a[i][j]=0;
                }
            }
            for(int b=0;b<N;b++)
                for(int d=b+1;d<N;d++){
                    scanf("%d",&a[b][d]);
                    a[d][b]=a[b][d];
                }
            for(int c=0;c<N;c++)
                for(int q=c+1;q<N;q++)
                    for(int k=q+1;k<N;k++){
                        int ans=a[c][q]+a[q][k]+a[c][k];
                        if(ans==3||ans==0){
                            flag=0;
                            c=N;
                            q=N;
                            break;
                        }
                    }
            }
            if(flag) printf("Great Team!
    ");
            else printf("Bad Team!
    ");
    
        T--;
        }
        return 0;
    }
  • 相关阅读:
    洛谷 P1194 飞扬的小鸟 题解
    洛谷 P1197 星球大战 题解
    洛谷 P1879 玉米田Corn Fields 题解
    洛谷 P2796 Facer的程序 题解
    洛谷 P2398 GCD SUM 题解
    洛谷 P2051 中国象棋 题解
    洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
    洛谷 P1004 方格取数 题解
    洛谷 P2331 最大子矩阵 题解
    洛谷 P1073 最优贸易 题解
  • 原文地址:https://www.cnblogs.com/dudulukeyxian/p/10622831.html
Copyright © 2011-2022 走看看