【2-SAT(两次DFS版)】BZOJ1823-[JSOI2010]满汉全席

【题目大意】

有n个材料,m个评委。每种材料可以被用来做满族菜或汉族菜,m个评委有两种可以让他满意的猜中。问是否可以满足所有评委要求?

【思路】

每天只能做三道题,我已经是一个废人了……(葛平躺.jpg)

裸2-SAT,先写了个两遍DFS的,速度略慢……24ms?

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<vector>
 6 using namespace std;
 7 const int MAXN=200+50;
 8 vector<int> E[MAXN];
 9 vector<int> rE[MAXN];
10 vector<int> vs;
11 int cmp[MAXN],vis[MAXN];
12 int cnt,n,m;
13
14 void addedge(int u,int v)
15 {
16     E[u].push_back(v);
17     rE[v].push_back(u);
18 }
19
20 void dfs(int u)
21 {
22     vis[u]=1;
23     for (int i=0;i<E[u].size();i++)
24     {
25         int v=E[u][i];
26         if (!vis[v]) dfs(v);
27     }
28     vs.push_back(u);
29 }
30
31 void rdfs(int u,int t)
32 {
33     vis[u]=1;
34     cmp[u]=t;
35     for (int i=0;i<rE[u].size();i++)
36     {
37         int v=rE[u][i];
38         if (!vis[v]) rdfs(v,t);
39     }
40 }
41
42 void init()
43 {
44     for (int i=0;i<MAXN;i++) vector<int>().swap(E[i]);
45     for (int i=0;i<MAXN;i++) vector<int>().swap(rE[i]);
46     scanf("%d%d",&n,&m);
47     for (int i=0;i<m;i++)
48     {
49         char c1,c2;
50         int x,y,fx,fy;
51         getchar();
52         scanf("%c%d %c%d",&c1,&x,&c2,&y);
53         if (c1==‘m‘) fx=x+n;else fx=x;
54         if (c2==‘m‘) fy=y+n;else fy=y;
55         if (c1==‘h‘) addedge(x+n,fy);else if (c1==‘m‘) addedge(x,fy);
56         if (c2==‘h‘) addedge(y+n,fx);else if (c1==‘m‘) addedge(y,fx);
57     }
58 }
59
60 void solve()
61 {
62     memset(vis,0,sizeof(vis));
63     for (int i=1;i<=n;i++) if (!vis[i]) dfs(i);
64     memset(vis,0,sizeof(vis)),cnt=0;
65     for (int i=vs.size()-1;i>=0;i--)
66         if (!vis[vs[i]]) rdfs(vs[i],++cnt);
67 }
68
69 void get_ans()
70 {
71     for (int i=1;i<=n;i++)
72         if (cmp[i]==cmp[i+n])
73         {
74             puts("BAD");
75             return;
76         }
77     puts("GOOD");
78 }
79
80 int main()
81 {
82     int T;
83     scanf("%d",&T);
84     while (T--)
85     {
86         init();
87         solve();
88         get_ans();
89     }
90     return 0;
91 }
时间: 2024-10-14 05:24:36

【2-SAT(两次DFS版)】BZOJ1823-[JSOI2010]满汉全席的相关文章

bzoj1823 JSOI2010 满汉全席 2-SAT 经典建模

这个题其实我一开始看完没有想到2-SAT 而思路巧妙,编程复杂度低也是我选这个题的原因,在3h4t的赛制中非常适合(好像是病句..) 具体的来说就是,因为每种材料都有两个选择,那就是做成满式或者是汉式 那么我们可以考虑,在信息学奥赛中,只有两种选择的有哪些.. 看来只有二分图和2-SAT了? 然后我们注意到,每个选择是互相排斥的,那么这不正好符合2-SAT的性质么?--每个布尔变量只能是成立或者是不成立,这与满式汉式这好一样. 好那如果你已经想到2-SAT了以后这题基本就出来了 因为本题根本不用

BZOJ1823 [JSOI2010]满汉全席 2-sat

原文链接http://www.cnblogs.com/zhouzhendong/p/8125944.html 题目传送门 - BZOJ1823 题意概括 有n道菜,分别可以做成满式和汉式(每道菜只能做成一种形式),有m个专家. 每个专家喜欢两种菜,比如汉式猪肉和满式牛肉. 问是否存在方案使得所有专家都被满足. 题解 2-sat模版题,连方案都不用输出,水过-- 代码 #include <cstring> #include <cstdio> #include <cstdlib&

bzoj1823: [JSOI2010]满汉全席

2-SAT. 好像很复杂的样子所以还在慢慢摸索... 这道题只需要tarjan缩点就可以了,如果有一个材料的满式和汉式同时被选中,代表不可能实现. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 5000 + 10; int g[maxn],v[maxn],next[maxn],eid; int n,m,T; int dfn[maxn

【BZOJ1823】[JSOI2010]满汉全席 2-SAT

[BZOJ1823][JSOI2010]满汉全席 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过专家认证的满汉全席,也是中国厨师最大的荣誉之一. 世界满汉全席协会是由能够料理满汉全席的专家厨师们所组成,而他们之间还细分为许多不同等级的厨师.为了招收新进的厨师进入世界满汉全席协会,将于近日举办满汉全席大赛,协会派遣许多会员当作评审员

蓝桥杯 大臣的旅费_树的最长度_两次DFS

#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #include <functional> #include <vector> using namespace std; const int maxn = 1000000 + 10; const int INF = 10000000

IT行业卓越的目标与绩效管理高级研讨课程大纲 (两天实战版)

IT行业卓越的目标与绩效管理高级研讨课程大纲 (两天实战版) (如欲公开以下内容,或者需对大纲作专业化调整,请与本人联系确认) [课程关键词]绩效管理循环.工作计划.MBO\KPI\BSC.企业文化 [课程时长]2天(估计每天6.5小时) [课程对象]企业领导者,部门经理.其他各级经理和主管 [课程形式] 演讲,问题讨论和个案分析. 问题讨论和个案分析将与授课紧密结合. 授课现场需准备投影仪,电源拖板,学员用胶贴纸,铅笔和练习纸,如再配白板和白板水笔更好. 采用了电影剪辑和情境片断等多媒体培训技

石化行业卓越的目标与绩效管理高级研讨课程大纲(两天论坛版)

石化行业卓越的目标与绩效管理高级研讨课程大纲 (两天论坛版) (如欲公开以下内容,或者需对大纲作专业化调整,请与本人联系确认) [课程关键词]绩效管理循环.工作计划.MBO\KPI\BSC.企业文化 [课程时长]2天(估计每天6.5小时) [课程对象]企业领导者,部门经理.其他各级经理和主管 [课程形式] 丰富新鲜的案例分析,深刻的问题解决建议,将与授课紧密结合. 授课现场需准备投影仪,电源拖板,如再配白板和白板水笔更好. 采用了电影剪辑和情境片断等多媒体培训技术,力求既紧紧扣住培训要点  又营

工程基建行业卓越的目标与绩效管理高级研讨课程大纲 (两天实战版)

工程基建行业卓越的目标与绩效管理高级研讨课程大纲 (两天实战版) (如欲公开以下内容,或者需对大纲作专业化调整,请与本人联系确认) [课程关键词]绩效管理循环.工作计划.MBO\KPI\BSC.企业文化 [课程时长]2天(估计每天6.5小时) [课程对象]企业领导者,部门经理.其他各级经理和主管 [课程形式] 演讲,问题讨论和个案分析. 问题讨论和个案分析将与授课紧密结合. 授课现场需准备投影仪,电源拖板,学员用胶贴纸,铅笔和练习纸,如再配白板和白板水笔更好. 采用了电影剪辑和情境片断等多媒体培

电信行业卓越的目标与绩效管理高级研讨课程大纲 (两天实战版)

电信行业卓越的目标与绩效管理高级研讨课程大纲 (两天实战版) (如欲公开以下内容,或者需对大纲作专业化调整,请与本人联系确认) [课程关键词]绩效管理循环.工作计划.MBO\KPI\BSC.企业文化 [课程时长]2天(估计每天6.5小时) [课程对象]企业领导者,部门经理.其他各级经理和主管 [课程形式] 演讲,问题讨论和个案分析. 问题讨论和个案分析将与授课紧密结合. 授课现场需准备投影仪,电源拖板,学员用胶贴纸,铅笔和练习纸,如再配白板和白板水笔更好. 采用了电影剪辑和情境片断等多媒体培训技