2-SAT
将每个限制条件改写为「若 \(A\) 则 \(B\)」的形式。从 \(A\rightarrow B\) 连一条有向边,跑 \(\rm SCC\) 缩点。若 \(i\) 和 \(i'\) 在同一联通块,则无解。否则有解。
具体的方案是,令每个点 \(c\)(所在联通块)小的为真。
P6378 [PA2010] Riddle
前后缀优化建图,记 \(pre_{a_i}\) 表示 \(a_i\) 点在其所在部分的前面的点是否有关键点,连边如下:
- \(a_i\rightarrow pre_{a_i}\),$ pre_{a_i}'\rightarrow a_i'$
- \(pre_{a_{i-1}}\rightarrow pre_{a_o}\),\(pre'_{a_i}\rightarrow pre'_{a_{i-1}}\)]
- \(pre_{a_{i-1}}\rightarrow a'_i\),\(a_i\rightarrow pre'_{a_{i-1}}\)
[ARC069F] Flags
二分答案 \(mid\),那么 \(i\) 点不能和 \([i-mid,i-1]\) 和 \([i+1,i+mid]\) 共存。但是 2-sat 是「若 \(A\) 则 \(B\)」的形式。于是可以将区间上的点变成虚拟点,然后每个虚拟点向自己的真实点的反向节点连边,就变成了「若 \(A\) 则 \(B\)」的形式。
建一棵线段树即可。

浙公网安备 33010602011771号