2-SAT学习笔记

快NOIP了我学这个干什么。。。

(2-SAT)定义

(SAT)(Satisfiability)的缩写,意为可满足性。即一串布尔变量,每个变量只能为真或假。要求对这些变量进行赋值,满足布尔方程。
例如(()(a) (or) (b)())(and)(()(a) (or) (!c)())(and)(()(a) (and) (c) (or) (b)()),求解这个问题就是让你找出一组a,b,c的取值使得这个表达式为真。
而这个问题当一个括号里有多于2个元素时只能枚举,是NP问题。(2-SAT)就是括号里只有两个元素的情况。

解法: 咕咕咕

注意事项:之前在理解的时候有很大一个难关就是不知道如何以及为什么要对表达式进行转化(我真菜)。

原因是这样:我们建的模型是(a)(b)连一条边表示选了(a)必须选(b),即((a) (and) (b))
而大多数题目中很多要求的形式是((a) (or) (b)) (and) ((!a) (or) (b))
这时候就需要转化: ((a) (or) (b)=(a) (and) (!b)) (or) ((a) (and) (!b))
我现在也不知道这个式子有什么道理,只是对着dalao们的模板推出来的这个式子,并且发现他是正确的。。。
所以我们连边的时候要从(a)(b)的反连一条边,从(a)的反向(b)连一条边。

原文地址:https://www.cnblogs.com/taduro/p/9744868.html