2-sat相关知识
转载:http://blog.csdn.net/luyuncheng/article/details/15172827
此题好纠结啊。。。其实2-sat关键是建边
此题网上好多题解都是直接说了建边而且建边完全没有解释清楚,说了的也都是模模糊糊完全不能让人信服啊啊啊啊
反正我是没有找到一个能让我完全理解的
索性自己想了下,我的建边以及证明如下:
因为公式不好贴,我有些是发的图有些是自己打的符号,复制粘贴的时候难免有问题,还有就是貌似网页字符有时候会和我自己手打的符号产生矛盾,会显示不出来,如有问题请指出。
说先说下2-sat
对于布尔方程的合取范式:(a∨b∨。。。)∧(c∨d。。。)
中a,b,。。。称为文字,他是一个布尔变量或其否定,像(a∨b∨。。。)这样用∨析取连接的部分称为子句。如果合取范式的每个子句中的文字个数都不超过两个,那么对应的sat问题称为2-sat问题
建边问题,首先利用=>蕴涵表达式将每个子句(a∨b)改写成等价形式。这样原布尔公式就变成了把(a=>b)形式的布尔公式用∧连接起来的形式。对每个布尔变量x,构造两个顶点分别代表x和~x,以=>关系为边建立有向图。此时,如果图上的a点能够达到b点的话,就表示当a为真时b也一定为真。因此,该图中同一个强连通分量中所含的所有文字的布尔值均相同。
如果存在某个布尔变量x,x和~x均在同一个强连通分量中,则显然无法令整个布尔公式的值为真,反正,如果不存在这样的布尔变量,那么对于每个布尔变量x,让
X所在的强连通分量的拓扑序在~x所在的强连通分量之后 < =>x为真
以上摘自《挑战程序设计竞赛》
好,现在我们还要将逻辑语句化成范式
AND语句就是自己本身的范式A∧B
a AND b==1:(a∨a)∧(b∨b)
a AND b==0:(~a∨~b)∧(~b∨a)
OR语句可以看成a∨b
a OR b==1:就是上面的(a∨b)等价形式
a OR b==0:换成合取范式为1的可以全部取非 化成~a∧~b
然后可以看成 (~a∨~a)∧(~b∨~b)
异或语句也是最难的:
首先异或操作可以看成:a XOR b == ~(a <–> b)
== ~ [ (a->b)∧(b->a) ]
== ~ [ (~ a ∨ b)∧(~ b ∨ a) ]
== [~(~a∨b)] ∨ [~(~b∨a)]
== (a∧~b) ∨ (b ∧ ~a)
得到析取范式:(a∧~b) ∨ (b ∧ ~a)
然后转换成合取范式(这里我不知道公式,望大神指教公式。我是用分配率一个个换进去的)
(a∧~b) ∨ (b ∧ ~a) ==[ (a∧~b)∨b ] ∧ [ (a∧~b)∨~a ]
==(b∨a)∧(b∨~b)∧(~a∨a)∧(~a∨~b)
好了如果a XOR b ==1 有(b∨a)∧(b∨~b)∧(~a∨a)∧(~a∨~b)
a XOR b ==0 由于前面那个退单范式中有个是因为前面加了~的
所以取~就是: (~a∨b)∧(~b∨a)
好了现在开始建边了
建边就根据前面说的对于每个(a∨b),~a连边到b.~b连边到a.
这也就是
a and b ==1 : ~a->a , ~b -> b
a and b ==0 : a->~b , b->~a
a or b ==1 : ~a->b , ~b->a
a or b ==0 : a->~a , b->~b
a xor b ==1 : a->~b,~b->a,~a->b,b->~a
a xor b ==0 : a->b,b->a,~a->~b,~b->~a
那么hdu4421就是将每一个int32的整数每一位拿出来做同样的操作就好了
2-sat相关知识的更多相关文章
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- 移动WEB像素相关知识
了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...
- listener监听器的相关知识
从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...
- UIViewController相关知识
title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...
- 【转】java NIO 相关知识
原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...
- NSString使用stringWithFormat拼接的相关知识
NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...
- iOS网络相关知识总结
iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...
- 电路相关知识--读<<继电器是如何成为CPU的>>
电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...
- 地址标记,SpringMVC转发与调用相关知识存档
1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...
- AJAX跨域调用相关知识-CORS和JSONP(引)
AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常 ...
随机推荐
- 解题报告:hdu 1073 Online Judge
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1073 Problem Description Ignatius is building an Onli ...
- 11.2Java-多态
一.父类 public class Fu { public void show(){ System.out.println("父类"); } } 二.子类 public class ...
- spark shuffle参数及调优建议(转)
原文:http://www.cnblogs.com/arachis/p/Spark_Shuffle.html spark.shuffle.file.buffer 默认值:32k 参数说明:该参数用于设 ...
- axis2与eclipse的整合:开始一个简单的axis2 的demo
1.下载axis2,现在axis2最新版本是axis2-1.6.2,下载地址:http://axis.apache.org/axis2/java/core/download.cgi 2.下载好的zip ...
- Node.js——防盗链
防盗链可以通过判断请求头中携带的referrer是否属于本域名
- 分析HTTP 2.0与HTTP 1.1区别
1.什么是HTTP 2.0 HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网.HTTP/2是HTTP协议自1999年HTTP 1.1发布 ...
- php从mysql数据库中取数据
php从数据库中取数据 面向过程 <?php $server_name="localhost:3306"; //数据库服务器名称 $username="root& ...
- swift -Dynamic Dispatch
These instructions perform dynamic lookup of class and generic methods. The class_method and super_m ...
- MySQL(MMM架构使用)
本案例要求基于普通版的MySQL服务器改造MMM架构,完成以下任务操作:启动MMM集群架构设置集群中服务器为online状态MySQL-MMM架构部署完成后需要启动,数据库端启动mmm-agent进程 ...
- app dcloud 打包公用证书
Android平台云端打包使用的DCloud公用证书 分类:HTML5+ 5+App开发 HBuilder|HBuilderX应用云端打包Android平台默认使用的DCloud公用证书,其信息如下: ...