2-SAT
之前学的时候什么也没写,现在已经忘干净了/cy。
定义
\(2-SAT\),简单的说就是给出 \(n\) 个集合,每个集合有两个元素,已知若干个 \(\langle a,b \rangle \),表示 \(a\) 与 \(b\) 矛盾(其中 \(a\) 与 \(b\) 属于不同的集合)。然后从每个集合选择一个元素,判断能否一共选 \(n\) 个两两不矛盾的元素。显然可能有多种选择方案,一般题中只需要求出一种即可。
$\quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad $ ——from oi wiki
解决
对于每一种明确的关系连边。
若 “\(X_a=p\) 或 \(X_b=q\)” 中至少有一个满足,那么我们建两条有向边:
\(X_a(\neg p)\Rightarrow X_b(q)\)
\(X_b(\neg q)\Rightarrow X_a(p)\)
可以简单总结为:其中一个不成立则另一个一定成立(这是明确的关系。
再假设我们有一个关系:\(X_1\) & \(X_2=false\)
则 \(X_1\) 和 \(X_2\) 中有一个为 \(false\),那么 \(X_1(1)\Rightarrow X_2(0)\)
\(X_2(1)\Rightarrow X_1(0)\)
若其中一个值为 \(true\),则另一个值就不能为 \(true\) 了。
为什么不由 \(false\) 向 \(true\) 连边?因为这样连边的话,一个值为 \(false\),另一个值为 \(false \quad or\quad true\) 都行,不是明确的关系。
那么,无解的情况就是,一个值的 \(true\) 和 \(false\) 在同一个强连通分量里的情况,因为这时候该值的 \(false\) 能走到 \(true\),\(true\) 能到达 \(false\)。
先写这些,有空再补/cy。

浙公网安备 33010602011771号