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;
    }
    


  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626107.html
Copyright © 2011-2022 走看看