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并选择删除