2-SAT阶段性学习小记
来源:互联网 发布:中国体育彩票关注软件 编辑:程序博客网 时间:2024/05/21 06:13
概念
SAT就是Satisfiability,适定性,即是否有满足所有条件的情况。一般来说2-SAT问题就是:给定一堆集合,大小为2,每个集合必须且最多取一个,不同集合间的不同元素有一些约束条件,通常表现为and、or、xor、not等形式,通过进行构图,跑2-SAT算法解决。
算法
从题目入手
题目大意:一国有n个党派,每个党派在议会中都有2个代表,现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会。已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委员会的成员,现要你判断满足要求的和平委员会能否创立?如果能,请任意给出一种方案。( POI 0106 )
首先想一个朴素的东西:
设一个党派的两个代表为A,B,那么如果1A跟2A有仇,那么如果选1A的话,就只能选2B了。我们给1A向2B连一条边,那么我们暴力的时候,选了点i则要把能走到的其他点全部选掉,假如走回了i,却是不同的代表,则不合法,例如从1A走回1B。
然后有得标记就标记,如果A不行就试B,两个都不行就无解(之后解释)。
时间复杂度O(NM),m边数,n点数。当然了,这个暴力并非一无是处:可以求字典序最小(大)的方案。
中间插入一段话:1A向2B连一条边,表示选1A必选2B,等价于给2A向1B连一条边,代表
先给出只能判断有无解的高速算法,之后解释 :
缩点
连边后tarjan对强联通分量缩点;把所有边反向。
判断可行
如果相同党派的两个代表处于相同分量,则不可行,否则可行。
接下来是找一种合法方案。
找矛盾分量
对于一个分量x,有且只有一个矛盾分量ant[x],满足:一对A,B分别出现在两个分量中。
拓扑排序
强连通分量已经缩成点,排序!
构造方案
按拓扑序访问点,如果没有选就选他,
选了x,ant[x]就不能选,并且ant[x]和它能走到的所有分量都要打上“不选”的标记。
没了。
解释
有时间再写···
- 2-SAT阶段性学习小记
- 2-SAT学习小记
- 阶段性学习总结(2)
- 2-sat 问题学习小记 Poj 3207 Ikki's Story IV - Panda's Trick (可行性判定)
- 2-SAT 学习笔记
- 2-SAT学习资料
- 2-SAT学习笔记
- [学习笔记]2-SAT
- 2-SAT学习总结
- 2-SAT学习笔记
- 学习的阶段性总结~~~
- Linux学习阶段性总结
- android学习阶段性总结
- COM阶段性学习结束
- 阶段性学习总结(1)
- mysql学习阶段性总结
- Maven学习阶段性总结
- 学习前端阶段性总结
- [Python模块学习] glob模块
- java文件的上传与下载原理(使用Servlet)
- 给妞的任务安排20160817
- JSPatch部署安全策略
- scala进阶20-隐式转换至Ordered与Ordering
- 2-SAT阶段性学习小记
- iOS调用外部地图导航
- JVM垃圾收集器----垃圾标记、回收算法
- linux内核 路由fib表之输出查找
- JSON与XML的区别比较
- UVALive 4730 -树状数组+带权并查集
- java jni 的使用
- 剑指offer--编程题参考代码(2)
- HHU暑期第五弹——图论入门(图的搜索+连通性+最短路径+生成树+二分图匹配+最大流)