第一道2sat,

其实2sat问题不难,只要记住一个:通过“推导出”连边

什么意思呢?就是一般题目中的变量都有两个状态,只能取一个,我们定义为true和false

对于每一个变量i,我们都拆成两个点,分别表示两种状态,设2i表示true,2i+1表示false。

然后来看每个条件,比如要满足xi=true or xj=true成立

显然,当xj=false,我们必然能推出xi=true,所以我们就连2j+1--->2i

同样的xi=false是,我们必然能推出xj=true,所以我们连2i+1--->2j

根据出这样的推导出关系我们就可以构建出一个图

如果能满足所有的条件,必然从任意变量的一个状态走,必定不能走到这个变量的对立状态

所以我们只要tarjan一下,判断任意2i,2i+1是否在一个强联通分量中,如果不存在,就说明能满足所有条件

这道题题目叙述很烦,只要掌握了基本的2sat问题,耐心分析一下是很容易做出的

 type node=record
       point,next:longint;
     end; var st,dfn,low,be,w:array[..] of longint;
    edge:array[..] of node;
    v,f:array[..] of boolean;
    tot,l,j,len,x,y,i,h,t,n,m,sum:longint;
    f1,p,f2,flag:boolean;
    s:string; function min(a,b:longint):longint;
  begin
    if a>b then exit(b) else exit(a);
  end; function get(x,y:longint):longint;
  var i:longint;
  begin
    if s[x]='m' then p:=false else p:=true;
    get:=;
    for i:=x+ to y do
    begin
      if s[i]=' ' then break;
      get:=get*+ord(s[i])-;
    end;
  end; procedure add(x,y:longint);
  begin
    inc(len);
    edge[len].point:=y;
    edge[len].next:=w[x];
    w[x]:=len;
  end; procedure tarjan(x:longint);
  var i,y:longint;
  begin
    inc(h);
    dfn[x]:=h;
    low[x]:=h;
    inc(t);
    st[t]:=x;
    f[x]:=true;
    v[x]:=true;
    i:=w[x];
    while i<>- do
    begin
      y:=edge[i].point;
      if not v[y] then
      begin
        tarjan(y);
        low[x]:=min(low[x],low[y]);
      end
      else if f[y] then low[x]:=min(low[x],low[y]);
      i:=edge[i].next;
    end;
    if low[x]=dfn[x] then
    begin
      inc(sum);
      while st[t+]<>x do
      begin
        y:=st[t];
        f[y]:=false;
        be[y]:=sum;
        dec(t);
      end;
    end;
  end; begin
  readln(tot);
  while tot> do
  begin
    readln(n,m);
    len:=;
    fillchar(w,sizeof(w),);
    for i:= to m do
    begin
      readln(s);
      l:=length(s);
      for j:= to l do
        if s[j]=' ' then break;
      x:=get(,j-);
      f1:=p;
      y:=get(j+,l);
      f2:=p;
      if f1 and f2 then
      begin
        add(x+n,y);
        add(y+n,x);
      end
      else if not f1 and not f2 then
      begin
        add(x,y+n);
        add(y,x+n);
      end
      else if not f1 and f2 then
      begin
        add(x,y);
        add(y+n,x+n);
      end
      else if f1 and not f2 then
      begin
        add(x+n,y+n);
        add(y,x);
      end;
    end;
    fillchar(v,sizeof(v),false);
    fillchar(f,sizeof(f),false);
    fillchar(st,sizeof(st),);
    fillchar(be,sizeof(be),);
    sum:=;
    for i:= to *n do
      if not v[i] then
      begin
        h:=;
        t:=;
        tarjan(i);
      end;     flag:=true;
    for i:= to n do
      if be[i]=be[i+n] then
      begin
        flag:=false;
        break;
      end;     if flag then writeln('GOOD') else writeln('BAD');
    dec(tot);
  end;
end.

bzoj1823的更多相关文章

  1. BZOJ1823 [JSOI2010]满汉全席 2-sat

    原文链接http://www.cnblogs.com/zhouzhendong/p/8125944.html 题目传送门 - BZOJ1823 题意概括 有n道菜,分别可以做成满式和汉式(每道菜只能做 ...

  2. 【BZOJ1823】[JSOI2010]满汉全席(2-sat)

    [BZOJ1823][JSOI2010]满汉全席(2-sat) 题面 BZOJ 洛谷 题解 很明显的\(2-sat\)模板题,还不需要输出方案. 对于任意两组限制之间,检查有无同一种石材要用两种不同的 ...

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

    [BZOJ1823][JSOI2010]满汉全席 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只 ...

  4. LG4171/BZOJ1823 「JSOI2010」满汉全席 2-SAT

    问题描述 LG4171 BZOJ1823 题解 显然,每个评委对每个材料的满式/汉式要求是对\(n\)个元素的\(0,1\)取值限制. 显然想到\(\mathrm{2-SAT}\) 于是就可以切掉了. ...

  5. Bzoj1823 [JSOI2010]满汉全席

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1640  Solved: 798 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的 ...

  6. C++之路进阶——bzoj1823(满汉全席)

    F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  hyxzc Logout 捐赠本站 Notice:由于本OJ建立在 ...

  7. 【BZOJ1823】 [JSOI2010]满汉全席

    Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而 ...

  8. bzoj1823 [JSOI2010]满汉全席(2-SAT)

    1823: [JSOI2010]满汉全席 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1246  Solved: 598[Submit][Status ...

  9. BZOJ1823[JSOI2010]满汉全席——2-SAT+tarjan缩点

    题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过 ...

随机推荐

  1. jsp--文本框正则表达式

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  2. 在Windows下用MingW 4.5.2编译live555

    1.下载live555(http://www.live555.com/liveMedia/public/),解压. 2.进入MingW Shell,输入cd: F:/Qt/live(假定解压到F:/Q ...

  3. 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联

    转载自:http://www.kancloud.cn/yueqian_scut/emlinux/106829 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sy ...

  4. msSQL数据库备份还原小结

    MSSQL自带了一个样例数据库pubs,就拿这个举例好了. 首先,来一次完全备份.对于数据量很大的数据库,这样的操作当然很费时间.所以我们采用每天凌晨4点一次完全备份,每个小时一个差异备份,每分钟一次 ...

  5. unity3d游戏开发(一)——圈圈叉叉

    参考:http://game.ceeger.com/forum/read.php?tid=1719 ———————————————————开始————————————— 好吧,吹了那么多我们开始吧,先 ...

  6. Codeforces Round #359 div2

    Problem_A(CodeForces 686A): 题意: \[ 有n个输入, +\space d_i代表冰淇淋数目增加d_i个, -\space d_i表示某个孩纸需要d_i个, 如果你现在手里 ...

  7. DEPRECATED: Use of this script to execute hdfs command is deprecated.

    DEPRECATED: Use of this script to execute hdfs command is deprecated. 本人安装的hadoop版本是2.4.0的,但每次执行命令时都 ...

  8. 来自内部的XSS攻击的防范

    来自内部的XSS攻击的防范 引入:前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击. 实践:其实从 http://www.2cto ...

  9. CSS3实战:让我们尽情的圆角吧

    如果说,WAP2.0网页的机型.浏览器适配给我们无线制作经理造成了巨大的心理 阴影,那么从iPhone.Android这些高端手机应用 起,我们终于可以庆幸比其他同行提 前迎来了一个新时代,这两种高端 ...

  10. jmeter linux使用经验小结

    1. 确认务必安装了JDK,并且把路径配置OK.否则执行会报错. 2. 当做负载机时,在hosts 配置上    你的ip   你的hostname  或者使用./bin/jmeter-server ...