【2-SAT】POJ3678-Katu Puzzle
【题目大意】
给出有向图G(V, E),每条边(a,b)有一个值c(c=0或1)和运算符op,问能否找到这一张有向图,满足所有的a op b=c?
【思路】
显然是2-SAT。不过要注意一定,如a and b=1,若a=0是必定无解的。像这种情况,要连边a+n->a;同理所有类似于a or b=0,也要两边a->a+n。即无解清新要保证自己连到自己的相反情形。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
const int MAXN=+;
vector<int> E[MAXN];
stack<int> s;
int low[MAXN],dfn[MAXN],cnt=,bcnt=;
int instack[MAXN],b[MAXN];
int n,m; void addedge(int u,int v)
{
E[u].push_back(v);
} void tarjan(int u)
{
dfn[u]=low[u]=++cnt;
instack[u]=;
s.push(u);
for (int i=;i<E[u].size();i++)
{
int to=E[u][i];
if (!instack[to]) tarjan(to),low[u]=min(low[u],low[to]);
else if (instack[to]==) low[u]=min(low[u],dfn[to]);
} if (dfn[u]==low[u])
{
int x;
++bcnt;
do
{
x=s.top();s.pop();
instack[x]=;
b[x]=bcnt;
}while (x!=u);
}
} void init()
{
scanf("%d%d",&n,&m);
for (int i=;i<m;i++)
{
int a,b,c;char op[];
scanf("%d%d%d%s",&a,&b,&c,op);
a++,b++;
if (op[]=='A')
{
if (c==) addedge(a,b+n),addedge(b,a+n);
if (c==) addedge(a,b),addedge(b,a),addedge(a+n,a),addedge(b+n,b);
}
if (op[]=='O')
{
if (c==) addedge(a+n,b+n),addedge(b+n,a+n),addedge(a,a+n),addedge(b,b+n);
if (c==) addedge(a+n,b),addedge(b+n,a);
}
if (op[]=='X')
{
if (c==) addedge(a,b),addedge(b,a),addedge(a+n,b+n),addedge(b+n,a+n);
if (c==) addedge(a+n,b),addedge(b+n,a),addedge(a,b+n),addedge(b,a+n);
}
}
} void solve()
{
memset(instack,,sizeof(instack));
for (int i=;i<=*n;i++) if (!instack[i]) tarjan(i);
int flag=;
for (int i=;i<=n;i++)
if (b[i]==b[i+n])
{
flag=;
break;
}
puts(flag?"YES":"NO");
} int main()
{
init();
solve();
return ;
}
【2-SAT】POJ3678-Katu Puzzle的更多相关文章
- POJ3678 Katu Puzzle 【2-sat】
题目 Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a boolean ...
- poj3678 Katu Puzzle 2-SAT
Katu Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6714 Accepted: 2472 Descr ...
- 【codeforces 761E】Dasha and Puzzle
[题目链接]:http://codeforces.com/contest/761/problem/E [题意] 给你一棵树,让你在平面上选定n个坐标; 使得这棵树的连接关系以二维坐标的形式展现出来; ...
- 【POJ】3678 Katu Puzzle
http://poj.org/problem?id=3678 题意:很幼稚的题目直接看英文题面= = #include <cstdio> #include <cstring> ...
- 【POJ2893&HDOJ6620】M × N Puzzle(n*m数码判定)
题意:给定一个n*m的矩阵,其中不重复地填[0,n*m-1],问是否能通过有限步数将0移到右下角 n,m<=1e3 思路:结论题 当板子了 #include<bits/stdc++.h&g ...
- POJ-3678 Katu Puzzle 2sat
题目链接:http://poj.org/problem?id=3678 分别对and,or,xor推出相对应的逻辑关系: 逻辑关系 1 0 A and B A'->A,B'->B ...
- POJ3678 Katu Puzzle
原题链接 \(2-SAT\)模板题. 将\(AND,OR,XOR\)转换成\(2-SAT\)的命题形式连边,用\(tarjan\)求强连通分量并检验即可. #include<cstdio> ...
- POJ 3678 Katu Puzzle(2 - SAT) - from lanshui_Yang
Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...
- 【WebApi系列】浅谈HTTP
[01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
随机推荐
- js监听浏览器后退事件
$(document).ready(function(e) { var counter = 0; if (window.history && ...
- CSS3禁止网页中文本被选中代码
通常大家会有js来实现,另一个方案就是,将-webkit-user-select 和-moz-user-select 的值设为none,这针对于移动用户,可能会很有用.请谨慎使用这个属性:因为大部分用 ...
- Java常用开发思想与知识点小记(一)
1. 子类在覆盖父类的方法时,不能抛出比父类更多的异常(儿子不能比父亲干更多的坏事),所以只能捕捉异常,通常在web层捕获异常,给用户一个友好提示. 2.Java内存模型与并发编程三个特性 htt ...
- kimbits_USACO
StringsobitsKim Schrijvers Consider an ordered set S of strings of N (1 <= N <= 31) bits. Bits ...
- $(document).ready 和 window.onload 的区别
1.相同点 两者都用于在网页加载完后执行相应代码块. 2.不同点 window.onload 在创建完 DOM 树后,所有外部资源(图片.Flash 动画等)加载完成,且整个页面在浏览器窗口中显示完毕 ...
- 再思linux内核在中断路径内不能睡眠/调度的原因(2010)【转】
转自:http://blog.csdn.net/maray/article/details/5770889 Linux内核中断路径中不能睡眠,为什么? 这里就行了很深入的讨论,值得一看:http:// ...
- thinkphp5 消息队列thinkphp-queue扩展
1.简介 thinkphp-queue是thinkphp的一个第三方扩展, 内置了 Redis,Database,Topthink ,Sync这四种驱动,推荐使用redis 2. 下载 和安装 com ...
- linux命令(3):rpm命令
查询当前环境是否已安装软件包,如下命令: [root@cloud ~]# rpm -qa | grep httpd httpd-2.4.6-31.el7.centos.1.x86_64 httpd-t ...
- LeetCode解题报告—— Jump Game & Merge Intervals & Permutation Sequence
1. Jump Game Given an array of non-negative integers, you are initially positioned at the first inde ...
- 用ab进行POST,GET压力测试,且定义header及json的内容
这个以前没作过,找了文档.搞定. 要求时间的单curl测试的方式如下: time curl http://xxxxx/hq/restapi/isStart curl用来用post请求,且有header ...