转载: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. .NET 出现参数化查询 需要参数但未提供该参数的错误

    1.问题的来源 在.NET或者C#中,我们一般执行sql语句的话,推荐使用参数化查询,这样可以避免sql注入的攻击,但是,我在使用参数化查询的时候 出现了以下的错误,详细如下图: 图一这是写sql语句 ...

  2. Saleae Logic添加NEC IR协议

    一.下载需要用到的代码 Git clone https://github.com/LiveOverflow/NECAnalyzer.git git clone --recursive https:// ...

  3. OC 实现一个TODO宏

    实现一个TODO宏 转载http://blog.sunnyxx.com/2015/03/01/todo-macro/ 实现一个能产生warning的TODO宏,用于在代码里做备忘,效果: 下面一步步来 ...

  4. spring 获取ApplicationContext

    第一种:获取根目录下的文件名 ApplicationContext ac = new ClassPathXmlApplicationContext("../mvc-dispatcher-se ...

  5. [安卓开发板]迅为IMX6 四核Android开发板

    工业级核心板-Android开发板 10层高速PCB设计,充分保证电磁兼容 处理器:开发板默认是四核商业扩展级芯片,可根据用户需求更换单核.双核.工业级.汽车级处理器,批量更省成本. 扩展引脚:320 ...

  6. leetcode_238. Product of Array Except Self_思维

    https://leetcode.com/problems/product-of-array-except-self/ 给一个vector<int> nums,输出一个vector< ...

  7. dd - 转换和拷贝文件

    摘要 dd [--help] [--version] [if=file] [of=file] [ibs=bytes] [obs=bytes] [bs=bytes] [cbs=bytes] [skip= ...

  8. day1 python 基础

    # 一行注释"""多行注释"""print("hello world\n" * 3)name = "sure& ...

  9. TCP/IP 协议分层

    协议分层 可能大家对OSI七层模型并不陌生,它将网络协议很细致地从逻辑上分为了7层.但是实际运用中并不是按七层模型,一般大家都只使用5层模型.如下: 物理层:一般包括物理媒介,电信号,光信号等,主要对 ...

  10. CAD参数绘制图案填充(网页版)

    绘制工程图,常常需要将某种图案填充到某一区域,例如剖面线的绘制.MxCAD提供了丰富的填充图案,可以利用这些图案进行快速填充. js中实现代码说明: function DrawPathToHatch2 ...