hdu-6152 Friend-Graph

来源:互联网 发布:淘宝手机端连接 编辑:程序博客网 时间:2024/06/05 13:34

http://acm.hdu.edu.cn/showproblem.php?pid=6152

  懂得越多,写的越少

拉姆齐定理:6 个人中至少存在3人相互认识或者相互不认识。

所以当n大于等于6时一定存在一个大小大于等于三的团或独立集,n小于6直接暴力就好了


#include<bits/stdc++.h>using namespace std;int a[2][10][10];int main(){int T,n;int i,j,x,z,k;cin>>T;while(T--){cin>>n;if(n<6){memset(a,0,sizeof a);for(i=1;i<=n;i++){for(j=i+1;j<=n;j++){scanf("%d",&a[0][i][j]);a[0][j][i]=a[0][i][j];a[1][i][j]=a[1][j][i]=!a[0][i][j];}}int flog=0;for(i=1;i<=n;i++){for(j=1;j<=n;j++){for(z=0;z<2;z++)if(a[z][i][j]){for(k=j+1;k<=n;k++){if(k!=i&&a[z][k][j]&&a[z][k][i])flog=1;}}}}if(flog)cout<<"Bad Team!"<<endl;elsecout<<"Great Team!"<<endl;}else{for(i=1;i<=n;i++){for(j=i+1;j<=n;j++){scanf("%d",&x);}}cout<<"Bad Team!"<<endl;}}}


非正解卡过,暴力判断,枚举过的点可以去掉


#include<bits/stdc++.h>using namespace std;const int MAXN = 3005;typedef long long ll;const int mod = 1e9 + 7;bool g[MAXN][MAXN],g1[MAXN][MAXN];int w[MAXN];int n;int main(){    int T;    cin >> T;    while(T--)    {    int ok=0;        int x;        cin >> n;        for(int i = 1; i <= n; i++)        {            for(int j = i + 1; j <= n; j++)            {                scanf("%d", &x);                if(x == 1)                {                    g[i][j] = g[j][i] = true;                }                else            {            g1[i][j]=g1[j][i]=true;    }            }        }        int m=0;        for(int i = 1; i <= n; i++)        {        m=0;            for(int j = 1; j <= n; j++)            {            if(g[i][j])            {            w[m++]=j;            }            }            for(int j=0;j<m;j++)            {            for(int k=j+1;k<m;k++)            {            if(g[w[j]][w[k]])            {            ok=1;            break;            }            else            {            g[i][w[j]]=g[w[j]][i]=false;            g[i][w[k]]=g[w[k]][i]=false;            }            }            if(ok)            break;            }            if(ok)            break;        }        if(ok==0)        for(int i = 1; i <= n; i++)        {        m=0;            for(int j = 1; j <= n; j++)            {            if(g1[i][j])            {            w[m++]=j;            }            }            for(int j=0;j<m;j++)            {            for(int k=j+1;k<m;k++)            {            if(g1[w[j]][w[k]])            {            ok=1;            break;            }            else            {            g1[i][w[j]]=g1[w[j]][i]=false;            g1[i][w[k]]=g1[w[k]][i]=false;            }            }            if(ok)            break;            }            if(ok)            break;        }        if(ok)        cout << "Bad Team!\n";        else        cout << "Great Team!\n";        memset(g, false, sizeof g);        memset(g1, false, sizeof g1);    }}

 





原创粉丝点击