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],low[maxn],vid;
int vis[maxn];
int s[maxn],sp;
int color[maxn],cid;
char c1,c2;

int addedge(int a,int b) {
    v[eid]=b; next[eid]=g[a]; g[a]=eid++;
}

void tarjan(int u) {
    dfn[u]=low[u]=++vid;
    s[++sp]=u; vis[u]=1;
    for(int i=g[u];~i;i=next[i]) {
        if(vis[v[i]]==0) {
            tarjan(v[i]);
            low[u]=min(low[u],low[v[i]]);
        }
        else if(vis[v[i]]==1) {
            low[u]=min(low[u],dfn[v[i]]);
        }
    }

    if(dfn[u]==low[u]) {
        ++cid;
        do {
            color[s[sp]]=cid;
            vis[s[sp]]=2;
        }while(s[sp--]!=u);
    }
}

int main() {
    scanf("%d",&T);
    while(T--) {
        memset(g,-1,sizeof(g)); eid=0;
        scanf("%d%d",&n,&m);
        for(int i=1,x,y;i<=m;i++) {
            scanf("\n%c%d %c%d",&c1,&x,&c2,&y);
            x=(x<<1)+(c1==‘h‘);
            y=(y<<1)+(c2==‘h‘);
            addedge(x^1,y);
            addedge(y^1,x);
        }
        memset(color,0,sizeof(color)),cid=0;
        memset(vis,0,sizeof(vis)),vid=0;
        for(int i=2;i<=((n<<1)|1);i++) if(!vis[i]) tarjan(i);

        bool flag=true;
        for(int i=1;i<=n;i++) if(color[i<<1]==color[(i<<1)|1]) {
            flag=false; break;
        }
        if(flag) printf("GOOD\n");
        else printf("BAD\n");
    }
    return 0;
}
时间: 2024-10-10 04:31:47

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

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

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

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

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

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

【BZOJ1823】 [JSOI2010]满汉全席

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

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

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

【题解】JSOI2010满汉全席

~bzoj1823 第一次接触2-SAT--SAT,即适定性(Satisfiability)的缩写.像名称所说,即满足需求的可能性问题,而k-SAT即每个人有k种需求,已经证明k>2时是一个NP完全问题.所以现在常见的考法便是2-SAT. 这一道题目算是一道裸的2-SAT问题.每一个人有两种需求,那么我们就将每一种食物拆成两个点,一个代表m,一个代表h,可以注意到满足所有人的需求即如果满足不了其中一个,必须满足另一个,所以我们建图的方法为从无法满足要求的点连向必须满足的点,代表若一个点不符合要求

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[