bzoj 1823: [JSOI2010]满汉全席

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 using namespace std;
  5 int t,n,m,head[205],next[2005],v[2005],cnt,dfn[205],cnt1,low[205];
  6 int zhan[205],zhan1[205],top,shu[205],shu1;
  7 int du()
  8 {
  9     int a1;
 10     char ch;
 11     ch=getchar();
 12     for(;ch!=‘m‘&&ch!=‘h‘;ch=getchar());
 13     scanf("%d",&a1);
 14     if(ch==‘m‘)
 15       return a1*2;
 16     else
 17       return a1*2-1;
 18 }
 19 void jia(int a1,int a2)
 20 {
 21     cnt++;
 22     next[cnt]=head[a1];
 23     head[a1]=cnt;
 24     v[cnt]=a2;
 25     return;
 26 }
 27 void dfs(int a1)
 28 {
 29     cnt1++;
 30     low[a1]=dfn[a1]=cnt1;
 31     zhan[a1]=1;
 32     top++;
 33     zhan1[top]=a1;
 34     for(int i=head[a1];i;i=next[i])
 35       if(!dfn[v[i]])
 36         {
 37             dfs(v[i]);
 38             low[a1]=min(low[a1],low[v[i]]);
 39         }
 40       else
 41         if(zhan[v[i]])
 42           low[a1]=min(low[a1],dfn[v[i]]);
 43     if(low[a1]==dfn[a1])
 44       {
 45         shu1++;
 46         for(int i=zhan1[top];i!=a1;top--,i=zhan1[top])
 47           {
 48             shu[i]=shu1;
 49             zhan[i]=0;
 50             }
 51         top--;
 52         shu[a1]=shu1;
 53         zhan[a1]=0;
 54       }
 55     return;
 56 }
 57 int main()
 58 {
 59     scanf("%d",&t);
 60     for(int i=0;i<t;i++)
 61       {
 62         memset(next,0,sizeof(next));
 63         shu1=0;
 64         top=0;
 65         cnt=0;
 66         cnt1=0;
 67         scanf("%d %d",&n,&m);
 68         for(int i=1;i<=2*n;i++)
 69           head[i]=dfn[i]=0;
 70         for(int j=0;j<m;j++)
 71           {
 72             int a1,a2,b1,b2;
 73             a1=du();
 74             b1=du();
 75             if(a1%2==0)
 76               a2=a1-1;
 77             else
 78               a2=a1+1;
 79             if(b1%2==0)
 80               b2=b1-1;
 81             else
 82               b2=b1+1;
 83             jia(a2,b1);
 84             jia(b2,a1);
 85             }
 86
 87     for(int i=1;i<=2*n;i++)
 88       if(dfn[i]==0)
 89         dfs(i);
 90     int kg=1;
 91     for(int i=1;i<=n;i++)
 92       if(shu[i*2]==shu[i*2-1])
 93         {
 94             kg=0;
 95             printf("BAD\n");
 96             break;
 97         }
 98     if(kg)
 99       printf("GOOD\n");
100     }
101   return 0;
102 }

2-set问题,根据评委需求建边,比如h1,h2那m2向h1建边,m1向h2建边。求2-set时用tarjin找环。

时间: 2024-11-03 05:22:50

bzoj 1823: [JSOI2010]满汉全席的相关文章

BZOJ 1823: [JSOI2010]满汉全席( 2-sat )

2-sat...假如一个评委喜好的2样中..其中一样没做, 那另一样就一定要做, 这样去建图..然后跑tarjan. 时间复杂度O((n+m)*K) ---------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<stack> using na

[BZOJ 1823][JSOI2010]满汉全席(2-SAT)

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

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

题目 传送门:QWQ 分析 2-sat模板(然而辣鸡如我还是调了好久) 代码 //bzoj 1823 2-sat #include <bits/stdc++.h> using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'

2-set 1823: [JSOI2010]满汉全席

这个题告诉我变量循环使用,一定要赋好初值!!!!!! 一定要赋好初值!!!!!!一定要赋好初值!!!!!!一定要赋好初值!!!!!! #include<iostream>#include<cstdio>#include<cstring>using namespace std;int t,n,m,head[205],next[2005],v[2005],cnt,dfn[205],cnt1,low[205];int zhan[205],zhan1[205],top,shu[

bzoj 1822: [JSOI2010]Frozen Nova 冷冻波 题解

[原题] 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 796  Solved: 218 [Submit][Status] Description WJJ喜欢"魔兽争霸"这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线距离不超过R,且巫妖看到小精灵的视线没

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

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

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

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

Luogu P4171 [JSOI2010]满汉全席(2-SAT)

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

BZOJ 1823 JSOI 2010 满汉全席 2-SAT

题目大意:有n种材料,m个评委.每种材料有两种不同的做法,每个评委有两个判定标准,做出来的菜品必须满足每一个评委至少一个要求.问有没有这样的方案. 思路:2-SAT经典建图问题.因为每一种材料只能有两种做法,这种约束条件通常就想到2-SAT.每一个评委必须至少满足一种,这就是建图的条件. 所以连边A' -> B B' -> A 这样表示的是如果A不能满足某个评委,那么就必须让b满足这个评委. 然后就是Tarjan缩点,判断是否有个菜品的两种做法在一个scc中,若有就是无解,没有就是有解. CD