【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‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
int get()
{
    int x; char c=getchar();
    while(c!=‘m‘&&c!=‘h‘)c=getchar();
    if(c==‘m‘)x=read()*2; else x=read()*2-1;
    return x;
}

struct Edge{
    int from,to;
};
vector<int> G[20005];
int low[4005], dfn[4005], sccno[4005], dfs_clock, scc_num;
stack<int> s;
void insert(int u,int v){
    G[u].push_back(v);
}
void tarjan(int u)
{
    dfn[u]=low[u]=++dfs_clock; s.push(u);
    for(int i=0;i<G[u].size();i++){
        int v=G[u][i];
        if(!dfn[v]){
            tarjan(v);
            low[u]=min(low[u], low[v]);
        }else if(!sccno[v]){
            low[u]=min(low[u], dfn[v]);
        }
    }
    if(low[u]==dfn[u]){
        scc_num++;
        for(;;){
            int x=s.top(); s.pop();
            sccno[x]=scc_num;
            if(x==u) break;
        }
    }
}

int main()
{
    int n,m,T=read();
    while(T--)
    {
        while(!s.empty()) s.pop();
        n=read(); m=read();
        int x,y,xp,yp;
        for(int i=0;i<m;i++)
        {
            x=get(); y=get();
            if(x%2==0)xp=x--;
            else xp=x++;
            if(y%2==0)yp=y--;
            else yp=y++;
            insert(xp,y); insert(yp,x);
        }

        memset(dfn,0,sizeof(dfn)); memset(sccno,0,sizeof(sccno));
        dfs_clock=scc_num=0;
        for(int i=1;i<=2*n;i++)
            if(!dfn[i]) tarjan(i);

        bool flag=1;
        for(int i=1;i<=n;i++)
            if(sccno[2*i]==sccno[2*i-1]) flag=false;
        if(flag) puts("GOOD");
        else puts("BAD");
        for(int i=0;i<=2*n;i++) G[i].clear();
    }
    return 0;
}

原文地址:https://www.cnblogs.com/noblex/p/8552303.html

时间: 2024-10-19 19:59:53

【BZOJ】1823: [JSOI2010]满汉全席(2-sat)的相关文章

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]满汉全席

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

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