2017CCPC網賽1003

算是自己參加的第一場CCPC比賽了,昨天做的也不怎麼樣,基礎弱難題又不會,還是默默地補題吧。

1003

Friend-Graph

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


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!



唯一做出來的一道題……

之前一直都在想入度出度、連通之類的,又覺得這個應該和鄰接矩陣有關,後來無奈之下上網搜了“3個點互相鄰接或3個點互相不鄰接”,才發現拉姆齊問題(在任何一個有6個人的組裏,存在3個人互相認識,或者存在3個人互相不認識。)接着就好做了,大於等於6的一律輸出“Bad Team!”,剩下的情況暴力枚舉,0,1,2的肯定沒有3人,是”Great Team!”。對於3個人的,有一個1出現(即有1個人和另一個人是朋友)就是”Great Team!”,對於有4個人的,小於等於一條邊的肯定是“Bad Team!”,有2條邊及以上肯定是”Great Team!”,對於5個人,我想不到什麼法子,就直接枚舉了……


#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
//int a[3010][3010];
int a[10][10];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n;
		scanf("%d",&n);
		int i,j,k;
		memset(a,0,sizeof(a));
		int sum=0;
		for(i=1;i<n;i++)
		{
			for(j=1;i+j<=n;j++)
			{
					int tem;
				scanf("%d",&tem);
				if(n<=6 && tem==1)
				{
					a[i][i+j]=1;
					a[j+i][i]=1;
					sum++;
				}
			}
		}
		
		if(n>=6)
			printf("Bad Team!\n");
		else if(n<3)
			printf("Great Team!\n");
		else
		{
			if(n==3)
			{
				if(sum==0)
					printf("Bad Team!\n");
				else
					printf("Great Team!\n");
			}
			else if(n==4)
			{
				if(sum>1)
					printf("Great Team!\n");
				else
					printf("Bad Team!\n");
			}	
			else if(n==5)
			{int judge=1;
				for(i=1;i<=n &&judge;i++)
				{
					for(j=i+1;j<=n && judge;j++)
					{
						for(k=j+1;k<=n;k++)
						{
							if((a[i][j]==1&&a[i][k]==1&&a[j][k]==1)||(a[i][j]==0 &&a[i][k]==0&&a[j][k]==0))
							{
								printf("Bad Team!\n");
								judge=0;
								break;
							}
						}
					}
				}
				if(judge==1)
					printf("Great Team!\n");
			}
		}
	}
	return 0;
}


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