\(2-SAT\)
- 定义:给出\(n\)个\(0/1\)选择,其中部分\(0/1\)选择会有冲突,求一组可行的选择
- 为方便叙述,我们把第\(i\)个\(0/1\)选择表示为\(a_{i,0},a_{i,1}\)
- 思路:
- 首先观察性质,\(a_{x,t},a_{x',t'}\)冲突意味着两者只能选其一。有了这个性质,我们进一步发现\(a_{i,0},a_{i,1}\)其实也是冲突的。也就是说我们可以把 \(0/1\)选择 和 冲突 全看成 \(0/1\)选择
- 然后我们来看 $0/1 $选择 的性质
- 如果 每个限制 都是在两者中选其一,不难想到我们可以建立两个相互对立的点来表示限制。
- 如果我们将这些对立的点对应 用边相连,我们不难发现这是一个二分图,并且我们要找到一个点集\(S\),使得点集\(S\)中的点相互没有连边,且\(|S|\geq n\)
- 我们可以发现这是个裸的最大独立集问题,利用\(dinic\),我们可以得到一个时间复杂度为\(O(m\sqrt{n})\)的算法,其中\(m\)为限制条数(二分图中边数)
- 但这个算法依然不是很优秀,我们继续思考。
- 现在我们连的边代表 限制,这样的边并不能满足图论中最基础的性质:传递性。例如:对于\((a,b),(b,c)\)两条边,我们只能得知\(a,b\)不在一个集合,以及\(b,c\)不在一个集合,但我们不能得到\(a,c\)一定在同一个集合,因为\(c\)可能还有其他限制,导致\(c\) 不选 比 选 更优。
- 因此我们考虑重新连边,我们把目光重新聚焦到 \(0/1\)选择 上,我们不难发现如果我们确定了\(a_{i,0},a_{i,1}\)其中一个不选,那么另一个一定要选。那么我们就可以把先前的图重构,即 对于\(\forall (a_{x,y},a_{z,w})\in E\)连接\((a_{x,y},a_{z,w'})\),若\(w=1\),则\(w’=0\);反之亦然
- 注意:同一个$0/1 \(选择中的\)a_{x,0},a_{x,1}$之间不再需要连边,因为这种边在新图中以自环的形式存在,因此不再在之后的操作中不再考虑。
- 这样我们的边\((u,v)\)的实际意义为选了\(u\),就必须选\(v\)。这样便就满足传递性了。那这样有什么好处呢?
- 我们可以注意到,对于有向图中的一个强连通分量(即对于强连通分量中的每个点都能将自己\(0/1\)选择的状态传递给强连通分量中的任意一个点),因此强连通分量中每个点的状态都相同。
- 但是如果同一个\(0/1\)选择\(a_{x,0},a_{x,1}\)都在同一个连通块,即同时都要选 或 同时都不选,就会产生矛盾
- 这时已经没有边\((a_{x,0},a_{x,1})\),只有边\((a_{x,0},a_{x,0}),(a_{x,1},a_{x,1})\)
- 那么对于全图,我们可以用\(tarjan\)来将强连通分量缩点,在用\(topu\)排序,求出一组可行方案