bzoj1823
第一道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的更多相关文章
- BZOJ1823 [JSOI2010]满汉全席 2-sat
原文链接http://www.cnblogs.com/zhouzhendong/p/8125944.html 题目传送门 - BZOJ1823 题意概括 有n道菜,分别可以做成满式和汉式(每道菜只能做 ...
- 【BZOJ1823】[JSOI2010]满汉全席(2-sat)
[BZOJ1823][JSOI2010]满汉全席(2-sat) 题面 BZOJ 洛谷 题解 很明显的\(2-sat\)模板题,还不需要输出方案. 对于任意两组限制之间,检查有无同一种石材要用两种不同的 ...
- 【BZOJ1823】[JSOI2010]满汉全席 2-SAT
[BZOJ1823][JSOI2010]满汉全席 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只 ...
- LG4171/BZOJ1823 「JSOI2010」满汉全席 2-SAT
问题描述 LG4171 BZOJ1823 题解 显然,每个评委对每个材料的满式/汉式要求是对\(n\)个元素的\(0,1\)取值限制. 显然想到\(\mathrm{2-SAT}\) 于是就可以切掉了. ...
- Bzoj1823 [JSOI2010]满汉全席
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1640 Solved: 798 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的 ...
- C++之路进阶——bzoj1823(满汉全席)
F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser hyxzc Logout 捐赠本站 Notice:由于本OJ建立在 ...
- 【BZOJ1823】 [JSOI2010]满汉全席
Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而 ...
- bzoj1823 [JSOI2010]满汉全席(2-SAT)
1823: [JSOI2010]满汉全席 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1246 Solved: 598[Submit][Status ...
- BZOJ1823[JSOI2010]满汉全席——2-SAT+tarjan缩点
题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过 ...
随机推荐
- 【开发】Form 表单 Linkbutton 禁用
在权限判定中,对于无权限操作的按钮可直接隐藏($.hide()). HTML 定义 <a id="btnPreAssign_GeneralTasks" class=" ...
- CSS text-indent
text-indent 属性规定文本块中首行文本的缩进. 一个作用就是首行文本缩进,一般的文本都是首行缩进两个字符,这里就可以使用text-indent { text-indent: 2em; } 另 ...
- node c/c++扩展模块build失败.
"深入浅出nodejs 朴灵" 例子 c/c++扩展模块 http://diveintonode.org/ 在作者的帮助下,build成功. 下面贴出的hello.cc和bindi ...
- [PR & ML 4] [Introduction] Model Selection & The Curse of Dimension
这两部分内容比较少,都是直觉上的例子和非正式的定义,当然这本书中绝大多数定义都是非正式的,但方便理解.后面深入之后会对这两个章节有详细的阐述.
- makefile--Unfound symbol
Unfound symbol ,库函数的包含问题或者头文件包含问题 makefile对#的识别度太低了,如果使用了,#它之后的可能就不能识别了,然后会报错的Unfound symbol /////// ...
- How to fix “Duplicate sources.list entry …” issue
The correct format of repository source line is <type of repository> <location> <di ...
- IOC----LightInject
开源项目 引入 LightInject.cs 默认服务 new ServiceContainer 注册跟获取获取服务 container.Register<IFoo, Foo>();con ...
- 不能将“const char [7]”转换为“LPCTSTR”
試試用強制轉換變數型態的方法吧,像這樣(LPCTSTR)"WinSun",若不行再試L"WinSun",再不行試_L"WinSun".
- 使用grub硬盘重装ubuntu
电脑一直是双系统,Windows8 + Ubuntu13.04,昨天瞎搞,更新了一下QT,结果就不能开机了...真心难. 老系统坏了也好,正好可以装个Ubuntu14.04LTS.手边没有U盘,可以把 ...
- asp.net mvc NPOI 生成Excel文件
private string PushToDown(string addtime) { DataTable dt = _bCreateCode.PushtoExcel(addtime); //1.实例 ...