8月19日CCPC——Friend-Graph

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.(n≤3000)

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!


此題是參賽隊伍中提交人數最多也是AC人數最多的一道題。

這道題的大體意思是,在一個團隊中有三個或以上的人認識(1)或者不認識(0)就是一個Bad Team,否則這個隊伍是Great Team

第一行輸入一個測試的數據組數,第二行輸入有團隊人數n,剩下的n-1行每行都是n-i個數字代表成員i和j之間的關係。

我們團隊解決這道題的思路就是,一個3000*3000的鄰接矩陣儲存團隊的關係,並且關係之間有像是一個有向圖,1和2認識,那麼肯定是2和1也認識。


所以這樣,我們就可以只管一個矩陣中的一半。

隨後依次記錄下每一行關係1和0的個數,每一行1和0的關係有其中一個是大於等於3的,那麼就說這不是一個好的團隊。

同時要注意一點:使用cin會出現超時的現象,在大的數據或數據多的時候儘可能選擇scanf。

代碼如下:

#include<stdio.h>  
int a[3001][3001];  
int main()  
{  
    int t;  
    int n,count1=0,count2=0;  
    scanf("%d",&t);  
    int flag=0;  
    while(t--)  
    {     
        scanf("%d",&n);  
            for(int i=1;i<=n-1;i++)  
            for(int j=i+1;j<=n;j++)  
            {  
              
                scanf("%d",&a[i][j]);  
            }  
            for(int i=1;i<=n-1;i++){  
            for(int j=i+1;j<=n;j++)  
            {  
                if(a[i][j]==1)  
                count1++;  
                if(a[i][j]==0)  
                count2++;     
                if(count1>=3||count2>=3){  
                    flag=1;  
                    count1=0;  
                    count2=0;  
                }     
            }  
                count1=0;  
                count2=0;  
            }     
            if(flag)  
            printf("Bad Team!\n");        
          
            else  
            printf("Great Team!\n");  
            flag=0;               
    }  
      
    return 0;  
      
}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章