[题意] N个布尔变量,M个AND\OR\XOR约束关系,判断是否能确定这N个变量的值使得其满足所有约束条件.
[分析]好题,加深了对2-SAT合取式和约束的理解。
每种约束关系连的边:
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 (两个数必须相同)
(某个布尔值必须为1或者说某个元素必须选,则连一条~x -> x的边)
(某个布尔值必须为0或者说某个元素必须不选,则连一条x -> ~x的边)
然后就是2-sat判定了
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include