zoukankan      html  css  js  c++  java
  • hiho一下第133周 2-SAT·hihoCoder音乐节(2-SAT)(强连通)

    2-SAT·hihoCoder音乐节

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    hihoCoder音乐节由hihoCoder赞助商大力主办,邀请了众多嘉宾和知名乐队参与演出。

    音乐会分为上午、下午两场进行,主办方指定了n首歌让乐队进行演唱。每首歌只会被演唱一次,要么在上午要么在下午。

    参加音乐会的嘉宾们对于歌曲的演唱时间有一些要求。具体来说,每位嘉宾会指定两首歌曲的演唱时间(上午或者下午)。如果最后实际的演出安排中,两首歌都没有达到嘉宾的要求,那么嘉宾就会对音乐节不滿意。如嘉宾A的要求是上午《我的滑板鞋》和下午《忐忑》,而最后的演出中上午没有《我的滑板鞋》只有《忐忑》,下午没有《忐忑》只有《我的滑板鞋》,那么嘉宾A是不满意的。

    音乐节主办方自然希望使所有嘉宾满意,但主办方后来发现有可能不存在一种歌曲的安排方案满足所有嘉宾,所以他们希望你判断一下这种情况是否会发生。

    解题方法提示

    输入

    输入第一行包含一个数字 K,代表K组数据。(K≤50)

    对于每一组数据,第一行包含两个非负整数n和m(n≤100,m≤1000),代表有n首歌和m位嘉宾。

    为了方便我们给予歌编号,编号分别从1 到n。接下的m行,每行都代表对应的嘉宾的喜好由一个英文字母(m或h)跟一个数字代表,如m1 代表这个评审喜欢第1首歌上午进行,而h2代表这个评审员喜欢第2首歌下午进行。

    输出

    对于每一组数据,输出一行,如果能满足所有嘉宾的情况,输出GOOD;否则输出BAD。

    样例输入
    2
    3 4
    m3 h1
    m1 m2
    h1 h3
    h3 m2
    2 4
    h1 m2
    m2 m1
    h1 h2
    m1 h2
    样例输出
    GOOD
    BAD
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <time.h>
    #include <string>
    #include <map>
    #include <stack>
    #include <vector>
    #include <set>
    #include <queue>
    #define met(a,b) memset(a,b,sizeof a)
    #define pb push_back
    using namespace std;
    const int N=2e3+50;
    const int M=N*N+10;
    int  n,m,k,s,t,tot,cut=0,tim=0,top=0;
    int head[N],vis[N];
    int dfn[N],low[N],stack1[N],num[N];
    struct man {
        int to,next;
    } edg[M];
    void add(int u,int v) {
        //printf("!!!%d %d
    ",u,v);
        edg[tot].to=v;
        edg[tot].next=head[u];
        head[u]=tot++;
    }
    void Tarjan(int u) {
        int v;
        low[u] = dfn[u] = ++tim;
        stack1[top++] = u;
        vis[u] = 1;
        for(int e = head[u]; e != -1; e = edg[e].next) {
            v = edg[e].to;
            if(!dfn[v]) {
                Tarjan(v);
                low[u] = min(low[u], low[v]);
            } else if(vis[v]) {
                low[u] = min(low[u], dfn[v]);
            }
        }
        if(low[u] == dfn[u]) {
            cut++;
            do {
                v = stack1[--top];
                num[v] = cut;
                vis[v] = 0;
            } while(u != v);
        }
    }
    void init(){
        tot=top=cut=tim=0;
        met(head,-1);
        met(low,0);
        met(dfn,0);met(vis,0);met(num,0);
    }
    int main() {
        int t,A,B;
        char a,b;
        scanf("%d",&t);
        while(t--){
            init();
            bool ok=true;
            scanf("%d%d",&n,&m);
            while(m--){
                scanf(" %c%d %c%d",&a,&A,&b,&B);
                int An=A+n;
                int Bn=B+n;
                if(a=='h')swap(A,An);
                if(b=='h')swap(B,Bn);
                add(An,B);add(Bn,A);
            }
            for(int i=1;i<=2*n;i++)if(!dfn[i])Tarjan(i);
            for(int i=1;i<=n;i++){
                if(num[i]==num[i+n]){
                    ok=false;
                    break;
                }
            }
            if(ok)puts("GOOD");
            else puts("BAD");
        }
        return 0;
    }
  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/6349835.html
Copyright © 2011-2022 走看看