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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值