A[x]
NOT A[x]
A[x] AND A[y]
A[x] AND NOT A[y]
A[x] OR A[y]
A[x] OR NOT A[y]
NOT (A[x] AND A[y])
NOT (A[x] OR A[y])
A[x] XOR A[y]
NOT (A[x] XOR A[y])
A[x] XOR NOT A[y]
建立有向图。
若图中存在有向边i->j,则表示若选了i必须选j
默认下面的x y都为1 也就是选择~~
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 , ~x->y , ~y->x , y -> ~x (两个数一个为0,一个为1)
XOR 结果为0:建边 x->y , ~x->~y , y->x, ~y->~x(两个数同为1或者同为0)
建图主要是参照上述。不过有一些得注意。
建图的一般准则是:
逆向建图:由于2-SAT某一点要么选1要么选0.....那么每次找出有矛盾的两点a、b,进行建图,a->b^1以及b->a^1
这样子就确保了一定选择某一个点以及可以更方便导出矛盾~~~
可参考~~hdu4115
正向建图:任意两点的关系有a-b,a-b^1,a^1-b,a^1-b^1....然后去掉矛盾的关系后,选择那些“只能”这么搭配的关系进行建边。
如去除矛盾关系之后有:a-b,a^1-b,a^1-b^1.这三种关系。已知 a^1、b与对方谁配对都行。但是a只能与b配对、b^1只能与a^1配对。所以建立两条边:a->b,b^1->a^1