2-SAT问题(白书)
1. 定义
给定一个布尔方程,判断是否存在一组布尔变量的真值指派使整个方程为真的问题,被称为布尔方程的可满足性问题(SAT)。SAT问题是NP完全的,但对于满足一定限制条件的SAT问题,还是能够有效求解的。
如果合取范式的每一个子句中的文字个数不超过两个,那么对应的SAT问题可以称为2-SAT问题。
(a∨b)∧¬a" role="presentation" style="position: relative;">(a∨b)∧¬a(a∨b)∧¬a 令a为假而b为真,则可以满足
(a∨¬b)∧(b∨c)∧(¬c∨¬a)" role="presentation" style="position: relative;">(a∨¬b)∧(b∨c)∧(¬c∨¬a)(a∨¬b)∧(b∨c)∧(¬c∨¬a) 令a和b为真,而c为假,则可以满足
利用强联通分量分解,可以在布尔公式子句数的线性时间内解决2-SAT问题
首先利用⇒" role="presentation" style="position: relative;">⇒⇒(蕴含)将每一个子句(a∨b)" role="presentation" style="position: relative;">(a∨b)(a∨b) 改写成等价的(¬a⇒b)∧(¬b⇒a)" role="presentation" style="position: relative;">(¬a⇒b)∧(¬b⇒a)(¬a⇒b)∧(¬b⇒a)
对于每个布尔变量x,构造两个顶点分别代表x和¬x" role="presentation" style="position: relative;">¬x¬x,以⇒" role="presentation" style="position: relative;">⇒⇒关系为有向边,建立有向图。此时,如果a点能够到达b点,就表示当a为真时b也为真。因此图中的同一个强联通分量中的所有布尔值均相同。
如果存在某个布尔变量x,x和¬x" role="presentation" style="position: relative;">x和¬xx和¬x均在同一个强联通分量中,则显然无法令整个布尔公式的值为真。反之,如果不存在这样的布尔变量,那么对于每个布尔变量x,让
x所在的强联通分量的拓扑序在¬x所在的强联通分量之后⇔x为真" role="presentation" style="position: relative;">x所在的强联通分量的拓扑序在¬x所在的强联通分量之后⇔x为真x所在的强联通分量的拓扑序在¬x所在的强联通分量之后⇔x为真
就是使得该公式的值为真的一组适合的布尔变量赋值。
2. 题目讲解
(1)POJ 3683
2-SAT问题(白书)的更多相关文章
- 白书P61 - 点集配对问题
白书P61 - 点集配对问题 状压DP #include <iostream> #include <cstdio> #include <cstring> using ...
- 白书P60 - 硬币问题
白书P60 - 硬币问题 完全背包.DP #include <iostream> #include <cstdio> #include <cstring> usin ...
- poj2991 Crane(线段树+集合)白书例题
题目大意:起重机有n节,题目给出要调节的k节,每节调节成x度,求最后底部的起重机的坐标(最顶上的起点为(0,0)). 分析:一开始我看白书,看不懂他那个向量旋转的坐标是怎么来的,翻了很多博客,才发现, ...
- Uva10474-STL水题-白书
白书的一道水题.话说好久没认真做难题了.今天出了排名,所有队伍里倒数第一啊! 代码没什么可说的了. #include <algorithm> #include <cstring> ...
- UVA大模拟代码(白书训练计划1)UVA 401,10010,10361,537,409,10878,10815,644,10115,424,10106,465,10494
白书一:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64609#overview 注意UVA没有PE之类的,如果PE了显示WA. UVA ...
- 《白书》上线段树RMQ的实现
白书上的线段树RMQ实现,自己重写了一遍: #include <bits/stdc++.h> using namespace std; const int MAXN=1<<17 ...
- la3523 白书例题 圆桌骑士 双联通分量+二分图
具体题解看大白书P316 #include <iostream> #include <algorithm> #include <vector> #include & ...
- [tem]线段树(白书版)
个人感觉有点坑 add用的标记永久化 set用的标记下传 #include <iostream> #include <cstdio> #include <algorith ...
- 白书 4.1.2 模运算的世界 P291
1.逆元 这里有个注意事项要说,就是当要求 (a-b)%m 的时候要注意不能直接 (a%m-b%m)%m 原因是得出的值有可能是负数,所以 (a%m-b%m+m)%m 才是正确的. //x,y是引用 ...
随机推荐
- 微信接入登录功能access_token流程记录
提示:只有认证过的订阅号或者服务号才能获取access_token. 1.app微信登录第一步是,app调起来微信客户端,通过app端的配置,引入一个微信类库, 2.授权成功后,微信会返回你一个cod ...
- windows安装ZIP压缩版的Weblogic Server
以前要装Weblogic Server的时候都是装的安装版,最近发现ZIP版本的Weblogic Server是一个只包含Weblogic Server的版本,于是就想着弄一下它. 这里用到的Webl ...
- strstr-strcat实现
strstr 调用格式 #include <string.h> char *strstr(const char *haystack, const char *needle); 功能说明 该 ...
- Visual Studio VS如何卸载Visual assistant
1 点击工具-扩展管理器 2 选中Visual Assist X,点击卸载即可.
- Lucene中TokenStream,Tokenizer,TokenFilter,TokenStreamComponents与Analyzer
TokenStream extends AttributeSource implements Closeable: incrementToken,end,reset,close Tokenizer直接 ...
- Web—CSS概述
一.概念: 它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言 的一个子集)等文件样式的计算机语言. 二.特点: 1.实现网页内容与样式的分离 2.降低图形文件的 ...
- oracle多表关联多字段update
多表关联多字段update 有代码有J8: update spatial_references set( auth_name, auth_srid, falsex, falsey, xyunits, ...
- 错误 1 无法将程序集“NBear.Data.dll”复制到文件“D:\newbpm\bpm\SureBpm\Bin\NBear.Data.dll”。无法将“D:\newbpm\bpm\SureSoft.WebServiceBaseLib\bin\Debug\NBear.Data.dll”添加到网站。 无法添加文件“Bin\NBear.Data.dll”。 拒绝访问。 D:\..
错误 1 无法将程序集“NBear.Data.dll”复制到文件“D:\newbpm\bpm\SureBpm\Bin\NBear.Data.dll”.无法将“D:\newbpm\bpm\SureSof ...
- Dos下同时执行多条命令简化操作
起因,要查询8080端口被哪些程序占用了,但是直接在cmd netstat –ano 的话 一下子一大把数据出来了不利于查找, 于是就想起dos下可以同时指向多条命令,如是写下如下命令: netsta ...
- MVC框架显示层——Velocity技术
Velocity,名称字面翻译为:速度.速率.迅速,用在Web开发里,用过的人可能不多,大都基本知道和在使用Struts,到底Velocity和Struts(Taglib和Tiles)是如何联系?在技 ...