这种一看就很2的东西....


参考资料:

由对称性解2-sat问题

2-sat解法浅析


$SAT$理论:

$2-SAT$

两种形式:

$x \in \hat B$

$x \lor y(x,\ y \in B)$

对于第二种形式,$x \lor y\ =\ \neg(\neg x \land \neg y)$

增加有向边$(\neg x,y)\quad (\neg y,x)$

显然一个强连通分量中的点会被同时选择或不选

因此$b_i$和$\neg b_i$不能在同一个$SCC$中,我们通过求$SCC$就可以判断可行性了

由上可知这个图是对称的,表现:

$1.\quad$原图具有对称传递性 $x \rightarrow y$则$\neg y \rightarrow \neg x$

感觉好像逆否命题

$2.\quad SCC$对称

$3.\quad x$的后代对称于$\neg x$的前代

如何构造一组解?

$1.$求$SCC$,缩点边反向

$2.$记录每个原图的点$x$的$\neg x$,可以发现一个$SCC$只会有一个否定,因为图是对称的,$SCC$中所有点的否定的$SCC$是相同的

$3.$拓扑排序

$4.$选第一个未染色的点(这里指$SCC$),染白色,然后将否定点及其后代染黑色

$5.$重复上述过程直到染色完成

最后所有白色的点就是一组解

总体复杂度$O(n)$

$Naive$做法

求$SCC$的做法复杂度很优秀,但只能判断可行性和构造一组解

对于一些题目不能很好的处理

而$naive$做法就是选择一个没有赋值的变量,赋值为真,然后$dfs$下去,看看是否会冲突(一个点和否定点都为真)

这样就非常灵活了,因为选择一个变量的值的权力掌握在我们手上

复杂度最坏可能变为$O(nm)$

[2-SAT]【学习笔记】【未完】的更多相关文章

  1. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  2. linux学习笔记---未完待续,缓慢更新

    做为linux菜鸟,由于work的需要,慢慢的开始接触学习linux. <鸟哥的linux私房菜>学习笔记. 一.基础命令操作 1.显示日期的命令 date 执行date命令后,显示结果为 ...

  3. jQuery 学习笔记(未完待续)

    一.jQuery概述    宗旨: Write Less, Do More.    基础知识:        1.符号$代替document.getElementById()函数        2.使 ...

  4. oracle-绑定变量学习笔记(未完待续)

    --定义变量SQL> var a number; --给绑定变量赋值SQL> exec :a :=123; PL/SQL procedure successfully completed. ...

  5. Scrapy 爬虫框架学习笔记(未完,持续更新)

    Scrapy 爬虫框架 Scrapy 是一个用 Python 写的 Crawler Framework .它使用 Twisted 这个异步网络库来处理网络通信. Scrapy 框架的主要架构 根据它官 ...

  6. Java学习笔记(未完待续)

    变量的作用域(scope)是指变量可以在程序中引用的范围.在方法中定义的变量称为局部变量(local variable).局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止.局部变量都必 ...

  7. Greys学习笔记(未完待续)

    Greys介绍 greys-anatomy是一个Java线上诊断工具,取名来自美剧<实习医生格雷>,由菜鸟-杜琨同学开发维护.比我们常用的脚本工具btrace提供更多的功能,greys采用 ...

  8. c++课程学习(未完待续)

    关于c++课程学习 按照计划,我首先阅读谭浩强c++程序设计一书的ppt,发现第一章基本上都是很基础的东西. 同时,书中与班导师一样,推荐了使用visual c++. 而师爷的教程里面推荐使用的是ec ...

  9. HTML, CSS学习笔记(完整版)

    第一章 div布局 前几课内容 .htm是早期的后缀.由于那时仅仅能支持长度为3的后缀.因此html与htm是一样的. shtml是server先处理然后再交给浏览器处理 #HTML小知识#之#XHT ...

  10. JavaScript设计模式:读书笔记(未完)

    该篇随我读书的进度持续更新阅读书目:<JavaScript设计模式> 2016/3/30 2016/3/31 2016/4/8 2016/3/30: 模式是一种可复用的解决方案,可用于解决 ...

随机推荐

  1. Fiddler显示服务器IP的方法

    Fiddler默认配置中是看不到服务器IP的,接下来简单介绍下在fiddler上也能够看到请求的服务器IP: 1.Fiddler--->Rules--->Customize Rules , ...

  2. 原生JavaScript常用的DOM操作

    之前项目一直都是用JQuery或者Vue来做的,确实好用,毕竟帮我们解决了很多浏览器兼容问题,但是后面发现大公司面试题都是要原生Javascript来做,然后我就一脸懵逼哈哈哈,毕竟大公司需要的框架或 ...

  3. 一对多(多对一)关系中的inverse和cascade属性

    转载请标明出处 http://www.cnblogs.com/haozhengfei/p/6049276.html 首先说一下inverse: "inverse" 直译过来就是&q ...

  4. 我在vs文本编辑中常用的快捷键----常更新

    1. Ctrl+向上键----文本向上滚动  Ctrl+向下键----文本向下滚动  Ctrl+Enter-----向下增加一行  Ctrl+Shift+Enter-------向上增加一行 2. 避 ...

  5. iptables命令 高级网络

    http://man.linuxde.net/iptables iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分.可以直接配置,也可以通过许多前端和图形界面配置. ...

  6. mysql批量数据脚本

    mysql批量数据脚本 1 建表 create table dept( id int unsigned primary key auto_increment, deptno mediumint uns ...

  7. 【编程技巧】ExtJs 设置GridPanel表格文本垂直居中

    详细讲解见 http://blog.csdn.net/li396864285/article/details/9310983 以下是我改修的代码: {         width:90,        ...

  8. 【编程技巧】一些 NSArray 的基本操作代码例子

    /*---------------------------切分数组------------------------------*/ //从字符串分割到数组- componentsSeparatedBy ...

  9. JavaScript学习日志:关于js分号

    javascript有自动添加分号的功能,但是不是所有情况都会自动添加,要区分: 1,如果语句独占一行 如果当前行内的语句能够被js正确解析,那么就会在句尾添加一个分号. (如何判断是否正确解析?你在 ...

  10. arcgis地图服务之 identify 服务

    arcgis地图服务之 identify 服务 在近期的一次开发过程中,利用IdentityTask工具查询图层的时候,请求的参数中ImageDisplay的参数出现了错误,导致查询直接不能执行,百度 ...