题意简述
对于 $n$ 个布尔元素 $a(x), x\in [0, n)$,给定两个 2-SAT 问题,问是否解集相同,否则构造一组解使得其仅为其中之一的解。
两个 2-SAT 均形如 $\land_{i = 0}^{m - 1}(f(x_{i, 0})\lor f(x_{i, 1}))$。
其中 $x_{i, j}\in[0, 2n)$,并有恒等式 $a(x) = \lnot f(2x) = f(2x + 1)$。
$n, m\le 1000$。
主要思路
先把 2-SAT 图建出来,求一下是否有解。
如果两 2-SAT 均无解,则解集相同。
如果仅一个 2-SAT 有解,则构造其任意一个解即可。
故只需考虑两 2-SAT 均有解的情况。
先来个传递闭包,然后有一些变量的值就是确定的(即可从该变量的某状态到达另一状态)。
如果有一个变量 $f(x)$ 仅在一个 2-SAT 中被确定,则钦定 $f(x)=0$,求出另一 2-SAT 的一个解即可。
如果有一个变量在两个 2-SAT 中被确定的值不同,直接求出某个 2-SAT 的任意一解即可。
现在确定的变量集合已经相同了。
设 $u\implies v$ 意为 $u$ 可达 $v$。
若存在 $u, v$ 使在一个 2-SAT 中有 $u\implies v$ 而另一 2-SAT 中没有,则钦定 $f(u)=1,f(v)=0$,在另一 2-SAT 中求一解即可。
否则两 2-SAT 解集相同。
参考代码
1 |
|