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

线段树优化建图。只不过本题的连边不是「若 \(A\)\(B\)」,而是「若 \(A\) 则 不 \(B\)」。

建一棵线段树即可,叶子节点向原节点的反节点连边。

posted @ 2024-09-11 11:41  xishanmeigao  阅读(4)  评论(0编辑  收藏  举报