Description

满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中。由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过专家认证的满汉全席,也是中国厨师最大的荣誉之一。 世界满汉全席协会是由能够料理满汉全席的专家厨师们所组成,而他们之间还细分为许多不同等级的厨师。为了招收新进的厨师进入世界满汉全席协会,将于近日举办满汉全席大赛,协会派遣许多会员当作评审员,为的就是要在參赛的厨师之中,找到满汉料理界的明日之星。 大会的规则如下:每位參赛的选手可以得到n 种材料,选手可以自由选择用满式或是汉式料理将材料当成菜肴。大会的评审制度是:共有m 位评审员分别把关。每一位评审员对于满汉全席有各自独特的見解,但基本见解是,要有兩样菜色作为满汉全席的标志。如某评审认为,如果没有汉式东坡肉跟满式的涮羊肉锅,就不能算是满汉全席。但避免过于有主見的审核,大会规定一个评审员除非是在认为必备的两样菜色都没有做出來的狀况下,才能淘汰一位选手,否则不能淘汰一位參赛者。换句话說,只要參赛者能在这兩种材料的做法中,其中一个符合评审的喜好即可通过该评审的审查。如材料有猪肉,羊肉和牛肉时,有四位评审员的喜好如下表: 评审一 评审二 评审三 评审四 满式牛肉 满式猪肉 汉式牛肉 汉式牛肉 汉式猪肉 满式羊肉 汉式猪肉 满式羊肉 如參赛者甲做出满式猪肉,满式羊肉和满式牛肉料理,他将无法满足评审三的要求,无法通过评审。而參赛者乙做出汉式猪肉,满式羊肉和满式牛肉料理,就可以满足所有评审的要求。 但大会后來发现,在这样的制度下如果材料选择跟派出的评审员没有特别安排好的话,所有的參赛者最多只能通过部分评审员的审查而不是全部,所以可能会发生没有人通过考核的情形。如有四个评审员喜好如下表时,则不論參赛者采取什么样的做法,都不可能通过所有评审的考核: 评审一 评审二 评审三 评审四 满式羊肉 满式猪肉 汉式羊肉 汉式羊肉 汉式猪肉 满式羊肉 汉式猪肉 满式猪肉 所以大会希望有人能写一个程序來判断,所选出的m 位评审,会不会发生 没有人能通过考核的窘境,以便协会组织合适的评审团。

Input

第一行包含一个数字 K,代表测试文件包含了K 组资料。每一组测试资料的第一行包含兩个数字n 跟m(n≤100,m≤1000),代表有n 种材料,m 位评审员。为方便起見,材料舍弃中文名称而给予编号,编号分别从1 到n。接下來的m 行,每行都代表对应的评审员所拥有的兩个喜好,每个喜好由一个英文字母跟一个数字代表,如m1 代表这个评审喜欢第1 个材料透过满式料理做出來的菜,而h2 代表这个评审员喜欢第2 个材料透过汉式料理做出來的菜。每个测试文件不会有超过50 组测试资料

Output

每笔测试资料输出一行,如果不会发生没有人能通过考核的窘境,输出GOOD;否则输出BAD(大写字母)。

Sample Input

2
3 4
m3 h1
m1 m2
h1 h3
h3 m2
2 4
h1 m2
m2 m1
h1 h2
m1 h2

Sample Output

GOOD
BAD

Solution

裸题,直接对食物$2-SAT$。

不会的话可能还得再重学一下……

Code

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #define N (2009)
 5 using namespace std;
 6
 7 struct Edge{int to,next;}edge[N<<1];
 8 int DFN[N],Low[N],ID[N],vis[N],dfs_num,id_num;
 9 int T,n,m,x[2],y[2];
10 int head[N],num_edge,stack[N],top;
11
12 inline int read()
13 {
14     int x=0,w=1; char c=getchar();
15     while (c<'0' || c>'9') {if (c=='-') w=-1; c=getchar();}
16     while (c>='0' && c<='9') x=x*10+c-'0', c=getchar();
17     return x*w;
18 }
19
20 void add(int u,int v)
21 {
22     edge[++num_edge].to=v;
23     edge[num_edge].next=head[u];
24     head[u]=num_edge;
25 }
26
27 void Clear()
28 {
29     memset(head,0,sizeof(head));
30     memset(Low,0,sizeof(Low));
31     memset(DFN,0,sizeof(DFN));
32     memset(ID,0,sizeof(ID));
33     num_edge=0; dfs_num=0; id_num=0;
34 }
35
36 void Tarjan(int x)
37 {
38     DFN[x]=Low[x]=++dfs_num; vis[x]=1; stack[++top]=x;
39     for (int i=head[x]; i; i=edge[i].next)
40         if (!DFN[edge[i].to])
41         {
42             Tarjan(edge[i].to);
43             Low[x]=min(Low[x],Low[edge[i].to]);
44         }
45         else if (vis[edge[i].to])
46             Low[x]=min(Low[x],DFN[edge[i].to]);
47     if (DFN[x]==Low[x])
48     {
49         vis[x]=0; ID[x]=++id_num;
50         while (stack[top]!=x)
51             vis[stack[top]]=0, ID[stack[top--]]=id_num;
52         top--;
53     }
54 }
55
56 int main()
57 {
58     T=read();
59     while (T--)
60     {
61         Clear();
62         n=read(); m=read();
63         for (int i=1; i<=m; ++i)
64         {
65             for (int j=0; j<=1; ++j)
66             {
67                 char c=getchar();
68                 while (c<'a' || c>'z') c=getchar();
69                 x[j]=(c=='m'); y[j]=read();
70             }
71             add(y[0]+(x[0]^1)*n,y[1]+x[1]*n);
72             add(y[1]+(x[1]^1)*n,y[0]+x[0]*n);
73         }
74         for (int i=1; i<=2*n; ++i)
75             if (!DFN[i]) Tarjan(i);
76         bool flag=1;
77         for (int i=1; i<=n; ++i)
78             if (ID[i]==ID[i+n]) flag=0;
79         if (flag) puts("GOOD");
80         else puts("BAD");
81     }
82 }

转载于:https://www.cnblogs.com/refun/p/10374734.html

BZOJ1823:[JSOI2010]满汉全席(2-SAT)相关推荐

  1. Bzoj1823 [JSOI2010]满汉全席

    Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1640  Solved: 798 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同 ...

  2. BZOJ1823[JSOI2010]满汉全席——2-SAT+tarjan缩点

    题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过 ...

  3. BZOJ1823:[JSOI2010]满汉全席——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1823 https://www.luogu.org/problemnew/show/P4171 题面 ...

  4. [JSOI2010] 满汉全席

    题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过 ...

  5. [洛谷P4171][JSOI2010]满汉全席

    题目大意:有$n$个点,每个点可以选或不选,有$m$组约束,形如$a,u,b,v$,表示$u=a,v=b$中至少要满足一个条件,问是否存在一组解,多组询问 题解:$2-SAT$,感觉是板子题呀,最后判 ...

  6. 【BZOJ】1823: [JSOI2010]满汉全席(2-sat)

    题目 传送门:QWQ 分析 2-sat模板(然而辣鸡如我还是调了好久) 代码 //bzoj 1823 2-sat #include <bits/stdc++.h> using namesp ...

  7. P4171 [JSOI2010]满汉全席

    简要的学了一下2-sat,然而不会输出方案. 就是个sb模板题啦 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define il ...

  8. java皮卡丘代码_用css以写代码形式画一个皮卡丘

    html5 formData上传 针对app端 function uploadFile() { if ((document.getElementById("file").files ...

  9. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

最新文章

  1. 统计函数——汇总统计时间类数据
  2. nacos 公共_SpringCloud配合注册中心Nacos的使用
  3. c语言记录五个数组编程,C语言经典编程之数组
  4. Windows Embedded CE 6.0开发初体验(二)CE开发环境
  5. pythonmysql部署_详解centos7+django+python3+mysql+阿里云部署项目全流程
  6. flutter listview 滚动到底部_flutter实战项目,教你使用flutter打造仿微信app页面!...
  7. kolla-ansible解析
  8. 基于BC95之AT命令的学习
  9. 老毛桃官方网站linux,老毛桃 Ubuntu
  10. Widows下通过CMD创建磁盘
  11. BackTrack5 (BT5)无线password破解教程WPA/WPA2-PSK无线password皴
  12. 渲染除了计算机渲染有没有云训啊,80%的设计师都在用云渲染渲图,云渲染究竟怎么样?...
  13. android 浏览器 查看证书,android浏览器弹出该网站的安全证书有问题如何解决
  14. Text-CNN 文本分类
  15. 川轻化c语言实验答案,c语言实验报告(学生学籍管理系统)
  16. 电机原理及电机拖动实验系统
  17. HDU_1055 POJ_2054 Color a Tree(贪心)
  18. 深度学习与西储大学轴承数据集(二)
  19. 软件测试面试简历测试技能
  20. qq轻聊版2015pc版 v6.7.13502 最新版

热门文章

  1. 速卖通新手入驻必须了解的“9大知识点”
  2. 对话国际农民丰收节贸易会-林育庆:菲律宾谋定中国农业
  3. 九 configparser模块
  4. javascript基本数据类型问题汇总
  5. HackerRank Super Six Substrings dp
  6. HDU 1003——Max Sum(动态规划)
  7. Cocos2d-x 脚本语言Lua中的面向对象
  8. centos6.5 设置ssh无密码登录
  9. 软件测试自动化的成功经验
  10. 梁建章的多米诺,混合办公的未知数