ps.写topsort输出解的时候各种混乱。还是没理解透。写点东西理清思路先。_10_28
2-sat 就是n个元素,可取0或1(2的含义),然后加上一些附加条件。问题的解为n个元素的取值。
感觉就是离散数学里面的数理逻辑什么的,一堆0、1。
问题的做法是通过建图来解。
一般将n个元素拆点为2*n个点,表示取0或取1。
然后,根据条件连边,边u->v表示,u发生,v一定发生。(这不就是数理逻辑里的那什么条件运算吗....)
所以,若至少存在一组解,则元素 i 取0的点和 i 取1的点不能在一个强连通分支(SCC)里。所以这里就要用到tarjin。(还有另外一个神马的算法忘了...)
可以证明不存在上述情况的话,可行解是一定存在的。
如果要求出一组可行解,就要 缩点建反向图,topsort并选择删除。