转自:http://www.cnblogs.com/-sunshine/archive/2012/11/03/2752824.html
2-SAT问题 :N个集合,每个集合中有两个元素xi,yi,选且只选一个元素。
不同集合间的元素可能不能同时被选中。 然后或者判定是否存在可行解,或者存在的话,求出一组可行解。
k-SAT(k>=3)的话,就是NP问题了。
还是很容易想到建图上去的。元素作为点,如果选择元素a,必须选择元素b的话,就连一条有向边。
那么一个强连通分量里面就是,如果选择其中任何一个点,那么其余的点,一定也要被选择。
这样的话,如果N个集合中存在集合中元素xi,yi在同一强连通分量中,那么一定无解。
否则的话,一定能找出一组可行解。
对于求强连通分量,建议用Kosaraju 算法,因为我们找出一组可行解的时候,需要拓扑排序一下。
而Kosaraju算法有一个隐藏的性质就是,求出的强连通分量就已经是拓扑排序后的。
具体的求法及证明请参看国家集训队论文 伍昱的<<由对称性解2-SAT问题>>,赵爽的<<2-SAT解法浅析>>
几个简单题解:
①基本2-SAT
poj 3207 Ikki’s story http://acm.pku.edu.cn/JudgeOnline/problem?id=3207
poj 3678 Katu Puzzle http://acm.pku.edu.cn/JudgeOnline/problem?id=3678 建图,用2-SAT 来判定是否存在可行解。
②二分+2-SAT判定
poj 2723 Get Luffy out http://acm.pku.edu.cn/JudgeOnline/problem?id=2723
poj 2749 Bulid roads http://acm.pku.edu.cn/JudgeOnline/problem?id=2749
poj 2296 Map Labeler http://acm.pku.edu.cn/JudgeOnline/problem?id=2296
hdu 3622 Bomb Game http://acm.hdu.edu.cn/showproblem.php?pid=3622 二分答案,用2-SAT来验证该解是否合法
③求出一组可行解
poj 3683 Priest John’s Busiest Day http://acm.pku.edu.cn/JudgeOnline/problem?id=3683
poj 3648 Wedding http://acm.pku.edu.cn/JudgeOnline/problem?id=3648
hit 1917 Peacefull Commission http://acm.hit.edu.cn/judge/show.php?Contestid=0&Proid=1917
hdu 1814 Peacefull Commission (推荐) http://acm.hdu.edu.cn/showproblem.php?pid=1814
前3个都是SPJ,求出任意一组解就可以了。就可以用论文中染色的方法解决。 by the way , poj 3468 题目描述很YD。
而hdu 1814 是求出一组字典序最小的解。 我们可以在求出SCC后,枚举每个点先选较小那个,并对所在的SCC染色。看是否有矛盾。
如果矛盾,就一定是另一个。依次染色求解,如果已经该点所在SCC已经染色就跳过。