BZOJ1823: [JSOI2010]满汉全席

原创 2018年04月16日 03:28:15

题目描述

算了太长了,就不复制

Solution

对于每种食材,只有HM两种选择
考虑2-SAT,对于每种限制条件就相当于X or Y = 1.
建边就是X’->Y, Y’->X
第一次写2-SAT感觉还不错

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 100010
inline int read(){
    int ret=0,ff=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='h') ff=-ff;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();
    return ret*ff;
}
int ts(int a){
    return a>0?a<<1|1:((~a)+1)<<1;
}
struct Edge{
    int u,v,next;
}E[maxn];
int head[maxn],ecnt=0,low[maxn],ins[maxn],stk[maxn],top,dfn[maxn],ord,cnt,blg[maxn];
void addedge(int u,int v){
    E[++ecnt].u=u;
    E[ecnt].v=v;
    E[ecnt].next=head[u];
    head[u]=ecnt;
}
void Tarjan(int x){
    low[x]=dfn[x]=++ord;
    stk[++top]=x,ins[x]=1;
    for(int i=head[x];i;i=E[i].next){
        int v=E[i].v;
        if(dfn[v]==0) Tarjan(v),low[x]=min(low[x],low[v]);
        else if(ins[v]) low[x]=min(low[x],dfn[v]);
    }
    if(low[x]==dfn[x]){
        ++cnt;
        int tmp;
        do{
            tmp=stk[top--];
            ins[tmp]=0;
            blg[tmp]=cnt;
        }while(tmp!=x);
    }
}
bool ck(int n){
    for(int i=2;i<=n;i+=2){
        if(blg[i]==blg[i^1]) return 0;
    }
    return 1;
}
void init(int n){
    for(int i=0;i<=n;++i)
        head[i]=ins[i]=blg[i]=dfn[i]=low[i]=stk[i]=0;
//  memset(E,0,sizeof(E));
    ecnt=top=cnt=ord=0;
}
int main(){
    //freopen("bzoj1823.in","r",stdin);
    int T=read();
    while(T--){
        int n=read(),m=read();
        for(int i=1;i<=m;++i){
            int aa=ts(read()),bb=ts(read());
            addedge(aa^1,bb),addedge(bb^1,aa);
        }
        for(int i=2;i<=(n<<1|1);++i){
            if(dfn[i]==0)Tarjan(i);
        }
        if(ck(n<<1|1)) puts("GOOD");
        else puts("BAD");
        init(n<<1|1);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wondover/article/details/79955641

Web 前端工程师课程 10 周

Web 前端工程师课程介绍 https://edu.csdn.net/topic/web115
  • 2018年02月26日 14:42

Bzoj1823:[JSOI2010]满汉全席:2-sat

题目连接:1823:[JSOI2010]满汉全席 2-sat首题! 2-sat的图中每一条变、边表示选了i必须选j 拆点,一个表示选一个表示不选,跑tarjan,如果有一个点拆成的两个点在一个联通分量...
  • qq_34025203
  • qq_34025203
  • 2016-07-06 16:20:11
  • 571

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

JSOI2010 满汉全席 2-SAT思想的经典应用 思路巧妙编程复杂度低
  • u012457935
  • u012457935
  • 2014-05-09 10:45:44
  • 1582

bzoj 1823 [JSOI2010]满汉全席

bzoj 1823 【jsoi2010】满汉全席 题解
  • unicornt_
  • unicornt_
  • 2016-07-16 07:48:22
  • 296

BZOJ 1823: [JSOI2010]满汉全席

裸的2-SAT 被sb错误给卡了  默认成字母后面只有一位数了   调了半天  发现 读入就错了 集训一天 终于彻底傻逼了  呵呵呵呵呵…… #include #include #inclu...
  • ws_yzy
  • ws_yzy
  • 2016-01-07 06:48:35
  • 526

【BZOJ 1823】 [JSOI2010]满汉全席

【BZOJ 1823】 [JSOI2010]满汉全席 2-SAT建模+可行性判断好题~ 2-SAT建模方法小结~
  • Regina8023
  • Regina8023
  • 2014-12-19 14:45:54
  • 1018

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

题目描述传送门题解2-SAT问题 首先mx和hx最多选一个 然后对于一个评委,栗如mi,hj的话,那么选了hi就必选hj,以此类推代码#include #include #include #inc...
  • Clove_unique
  • Clove_unique
  • 2017-02-21 14:03:21
  • 866

【bzoj1823】[JSOI2010]满汉全席 2-sat

学习一下2-sat 算法流程如下: 1、建图,图具有对称性(对于有限制的A,从A‘向A连边) 2、tarjan算法缩点 3、判断是否有解:若存在一组A和A'在同一个强连通分量中,则无解 4、...
  • u012288458
  • u012288458
  • 2016-07-11 21:05:42
  • 587

【BZOJ1823】【JSOI2010】满汉全席

【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; #define MA...
  • qq_39972971
  • qq_39972971
  • 2018-03-22 20:18:05
  • 19

[BZOJ1823][JSOI2010]满汉全席 && 2-sat

PPT:http://wenku.baidu.com/view/afd6c436a32d7375a41780f2.html 这是道2-sat裸题吧 练手的 #include #include #i...
  • shiyukun1998
  • shiyukun1998
  • 2015-04-29 12:49:34
  • 384
收藏助手
不良信息举报
您举报文章:BZOJ1823: [JSOI2010]满汉全席
举报原因:
原因补充:

(最多只允许输入30个字)