zoukankan      html  css  js  c++  java
  • 【2017中国大学生程序设计竞赛

    【链接】http://acm.hdu.edu.cn/showproblem.php?pid=6152


    【题意】


    有一个队伍,如果队伍里有三个或三个以上的人互相认识 或者队伍里有三个或三个以上的人互相不认识,那么这个队伍为bad team, 否则为great team。

    【题解】


    参考上一篇文章的求3元环做法。
    只不过在两张图上进行而已.
    两个递归可以合在一起写的。
    (不是朋友的话标记这条边为0,是朋友标记这条边为1)
    在标记为0的图上做一遍,在标记为1的图上做一遍.


    【错的次数】


    0

    【反思】


    【代码】

    #include <bits/stdc++.h>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define ms(x,y) memset(x,y,sizeof x)
    #define ri(x) scanf("%d",&x)
    #define rl(x) scanf("%lld",&x)
    #define rs(x) scanf("%s",x+1)
    #define oi(x) printf("%d",x)
    #define ol(x) printf("%lld",x)
    #define oc putchar(' ')
    #define os(x) printf(x)
    #define all(x) x.begin(),x.end()
    #define Open() freopen("F:\rush.txt","r",stdin)
    #define Close() ios::sync_with_stdio(0)
    #define ll long long
    using namespace std;
    const int MAXN = 3e3+100;
    bool ar[MAXN][MAXN];
    bool v[MAXN][2];
    int n;
    
    bool dfs(int i,int dad,bool f)
    {
        v[i][f]=true;
        rep1(j,1,n){
            if(j==i) continue;
            if(ar[i][j]==f){
                if(i!=dad&&j!=dad&&i!=j&&ar[j][dad]==f)
                    return true;
                if(!v[j][f])
                    if(dfs(j,i,f)) return true;
            }
        }
        return false;
    }
    
    main()
    {
        int t;
        ri(t);
        while(t--){
            ms(v,0);
            ri(n);
            rep1(i,1,n-1){
                rep1(j,1,n-i){
                    int tem;
                    ri(tem);
                    ar[i][i+j]=ar[i+j][i]=tem;
                }
            }
            bool f=1;
            rep1(i,1,n){
                if(!v[i][0]){
                    if(dfs(i,i,0)) f=0;
                }
                if(!v[i][1]){
                    if(dfs(i,i,1)) f=0;
                }
                if(!f) break;
            }
            if(f)
                puts("Great Team!");
            else
                puts("Bad Team!");
        }
        return 0;
    }
    


  • 相关阅读:
    浅谈Java中的栈和堆
    Java运行时内存划分
    浅谈Static
    浅谈同一家公司多个系统,共用登录用户名和密码
    浅谈Final
    浅谈StringBuffer
    浅谈加密算法BCrypt
    序列表 批量的含义
    安装activemq和java代码实现生产和消费
    Restful
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626107.html
Copyright © 2011-2022 走看看