2-sat
http://www.cppblog.com/MatoNo1/archive/2011/07/13/150766.html 11种 (默认表达式值为1) 1. x x必选 (x' ,x) 2. ~x x必不选(x, x') 3. x&y x和y必都选 (x',x),(y',y) 4. x&(~y) x和y' 都选 (x',x),(y,y') 5. x|y x,y至少选一个(x',y),(y',x) 6. x|(~y) x,y'至少选一个(x',y'),(y,x) 7. ~(x&y) => (~x)|(~y) , x',y'至少选一个 (x,y'),(y,x') 8. ~(x|y) =>(~x)&(~y), x',y'必都选 (x,x'),(y,y') 9. x^y x,y不可以同时选 ,x',y'也不可以同时选(即x,y取值不同) (x,y'),(y,x'),(x',y),(y',x) 10. ~(x^y) (x,y取值相同) (x,y),(y,x),(x',y'),(y',x') 11.x^(~y) (x,y'取值不同,x,y取值相同) (x,y),(y,x),(x',y'),(y',x') POJ 3678 2-sat建图题,把每个值是1(a)和0(~a)为两种状态,分清楚各种操作的本质就很简单了 AND 结果为1:建边 ~x->x,~y->y (两个数必须全为1) AND 结果为0:建边 y->~x,x->~y (两个数至少有一个为0) OR 结果为1:建边 ~x->y,~y->x (两个数至少有一个为1) OR 结果为0:建边 x->~x,y->~y (两个数必须全为0) XOR 结果为1:建边 x->~y,y->~x,~y->x,~x->y (两个数必须不同) XOR 结果为0:建边 x->y,y->x,~x->~y,~y->~x (两个数必须相同)