转载: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相关知识的更多相关文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  2. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  3. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  4. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  5. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  6. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  7. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  8. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

  9. 地址标记,SpringMVC转发与调用相关知识存档

    1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...

  10. AJAX跨域调用相关知识-CORS和JSONP(引)

    AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常 ...

随机推荐

  1. 转: ORA-06508 could not find program unit being called: "DBSNMP.BSLN_INTERNAL

    告警日志中出现错误 Sun Jul 28 00:00:00 2013Errors in file /oracle/app/db/diag/rdbms/mis/MIS1/trace/MIS1_j001_ ...

  2. Mybatis事务处理

    知识点有事务处理的配置,还有事务处理的方法 事务处理的配置: mybatis的事务处理由两种方式控制,JDBC和MANAGED:  MANAGED就是说事务处理由第三方的插件来完成,比如说spring ...

  3. Join方法,yield方法,线程的优先级

  4. 447 Number of Boomerangs 回旋镖的数量

    给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序).找到所有回旋镖的数量.你可以假设 n ...

  5. 204 Count Primes 计数质数

    计算所有小于非负整数 n 的质数数量. 详见:https://leetcode.com/problems/count-primes/description/ Java实现: 埃拉托斯特尼筛法:从2开始 ...

  6. ADO.net增删改的使用

    添加数据 -------------------------------------------------- //让用户输入要添加的内容 Console.WriteLine("请输入要添加 ...

  7. 特性property

    #property装饰器用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接引用# class People:# def __init__(self,name,weight,height ...

  8. vue cli 3 打包过大问题

    vue cli 3 打包命令 npm run build,这种情况下的打包可以通过设置 vue.config.js里面的 productionSourceMap: false. 如果是自己设置的打包环 ...

  9. 源代码管理git的使用

    Git ----本地仓库---- 1.新建一个“本地仓库” git init 2.配置仓库 ①告诉git你是谁 git config user.name syl ②告诉git怎么联系你 git con ...

  10. Visual Studio 2013 错误系统找不到指定文件,0x80070002

    错误:Visual Studio 2013 按照成功后,可以创建空web项目,但不能建webform 和 mvc 项目. 提示系统找不到指定文件,0x80070002. 解决方式: Step1: Wi ...