POJ3678:Katu Puzzle 2-SAT
来源:互联网 发布:mac五笔拼音输入法 编辑:程序博客网 时间:2024/05/21 06:38
这题几乎包含了2-SAT的所有常见模型啦。
注意的是如果(A,A’)一定选A,那么就连一条A’->A的边。我也解释不清为什么QAQ。。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,m,cnt,tot,top,scc,flag;int low[2005],dfn[2005],belong[2005],inset[2005],stack[2005],head[2005];int next[4000005],list[4000005];char s[5];inline int read(){ int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f;}inline void insert(int x,int y){ next[++cnt]=head[x]; head[x]=cnt; list[cnt]=y;}void dfs(int x){ low[x]=dfn[x]=++tot; stack[++top]=x; inset[x]=1; for (int i=head[x];i;i=next[i]) if (!dfn[list[i]]) { dfs(list[i]); low[x]=min(low[x],low[list[i]]); } else if (inset[list[i]]) low[x]=min(low[x],dfn[list[i]]); if (low[x]==dfn[x]) { int i=-1; scc++; while (i!=x) { i=stack[top--]; belong[i]=scc; inset[i]=0; } }}inline void tarjan(){ for (int i=1;i<=2*n;i++) if (!dfn[i]) dfs(i);}int main(){ n=read(); m=read(); for (int i=1;i<=m;i++) { int u=read()+1,v=read()+1,c=read(); scanf("%s",s); switch (s[0]) { case 'A': if (c==1) { insert(2*u,2*v); insert(2*v,2*u); insert(2*u-1,2*u); insert(2*v-1,2*v); } else { insert(2*u,2*v-1); insert(2*v,2*u-1); } break; case 'O': if (c==1) { insert(2*u-1,2*v); insert(2*v-1,2*u); } else { insert(2*u-1,2*v-1); insert(2*v-1,2*u-1); insert(2*u,2*u-1); insert(2*v,2*v-1); } break; case 'X': if (c==1) { insert(2*u-1,2*v); insert(2*v-1,2*u); insert(2*v,2*u-1); insert(2*u,2*v-1); } else { insert(2*u-1,2*v-1); insert(2*v-1,2*u-1); insert(2*u,2*v); insert(2*v,2*u); } } } tarjan(); for (int i=1;i<=n;i++) if (belong[2*i-1]==belong[2*i]) {flag=1; break;} flag?puts("NO"):puts("YES"); return 0;}
0 0
- POJ3678:Katu Puzzle 2-SAT
- POJ3678 Katu Puzzle【2-SAT】
- POJ3678 Katu Puzzle (2-SAT检验)
- [POJ3678]Katu Puzzle(2-SAT)
- poj3678:Katu Puzzle(2-SAT)
- poj3678 Katu Puzzle(2-SAT+经典建图)
- POJ3678.Katu Puzzle——2-sat裸题
- POJ3678 Katu Puzzle(2-sat tanjar判矛盾)
- poj3678 Katu Puzzle
- [POJ3678] Katu Puzzle
- POJ_3678 Katu Puzzle 2-sat
- POJ3678——Katu Puzzle
- poj3678 Katu Puzzle 【解法一】
- poj3678 Katu Puzzle 【解法二】
- PKU 3678 Katu Puzzle - 2-SAT判定
- PKU 3678 Katu Puzzle(2-SAT)
- poj 3578 katu puzzle #2-sat
- POJ 3678 Katu Puzzle (2-SAT)
- 为什么选择.live()或.delegate()而不是.bind()
- 安卓高斯模糊特效blur_demo(包含viewpager切换动画)
- input type="checkbox",选中或取消,将value存入隐藏域
- classpath和环境变量设置
- 通过Navicat for MySQL恢复数据 mysql [Err] 2006 - MySQL server has gone away [Err] INSERT INTO错误
- POJ3678:Katu Puzzle 2-SAT
- viewpager一屏多个滑动效果
- Objective-C 关于找到所在的视图控制器
- jQuery中的.bind()、.live()和.delegate()之间区别分析
- mysql的replace into类似于oracle的merge sql语句
- gridview中 编辑列 要点两次才能出现编辑文本框
- 实现打印机的共享
- jsp---DBUtil用法之ResultSetHandler 和 QueryRunner总结
- java基本类型的长度