HDU 6152 Friend-Graph
Posted 谦谦君子,陌上其华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 6152 Friend-Graph相关的知识,希望对你有一定的参考价值。
http://acm.hdu.edu.cn/showproblem.php?pid=6152
题意:
一个团队如果存在三个或者三个以上的人互为朋友的关系,或者都不是朋友的关系,那么就说明这个团队是一个坏团队,否则输出好团队。
思路:
比赛完了之后再去网上看了一下大家的做法,发现很多人都是直接暴力的。。。
还有人直接根据定理:6个人中必有3个人互相认识或互相不认识。。。
当时我想的是根据度数来判断,每个点的度数不能超过2,并且度数为1的点和度数为0的点的个数也是有限制的,具体参见代码。
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<sstream> 6 #include<vector> 7 #include<stack> 8 #include<queue> 9 #include<cmath> 10 #include<map> 11 #include<set> 12 using namespace std; 13 typedef long long ll; 14 typedef pair<int,ll> pll; 15 const int inf = 0x3f3f3f3f; 16 const int maxn=3000+5; 17 const int mod=1e9+7; 18 19 int n, m; 20 int degree[maxn]; 21 22 int main() 23 { 24 //freopen("in.txt","r",stdin); 25 int T; 26 scanf("%d",&T); 27 while(T--) 28 { 29 memset(degree,0,sizeof(degree)); 30 scanf("%d",&n); 31 for(int i=1;i<n;i++) 32 { 33 for(int j=1;j<=n-i;j++) 34 { 35 int x; 36 scanf("%d",&x); 37 if(x==1) {degree[i]++;degree[i+j]++;} 38 } 39 } 40 int cnt0=0,cnt1=0,cnt2=0;; 41 bool flag=true; 42 for(int i=1;i<=n;i++) 43 { 44 if(degree[i]>2) {flag=false;break;} 45 else if(degree[i]==1) cnt1++; 46 else if(degree[i]==0) cnt0++; 47 else cnt2++; 48 } 49 if(flag) 50 { 51 if(cnt2==0) 52 { 53 if(cnt1/2+cnt0<3) puts("Great Team!"); 54 else puts("Bad Team!"); 55 } 56 else 57 { 58 if(cnt1+cnt0<3) puts("Great Team!"); 59 else puts("Bad Team!"); 60 } 61 } 62 else puts("Bad Team!"); 63 } 64 return 0; 65 }
以上是关于HDU 6152 Friend-Graph的主要内容,如果未能解决你的问题,请参考以下文章
hdu 6152 : Friend-Graph (2017 CCPC网络赛 1003)