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 (两个数必须相同)