有向 2-SAT 见此
有数组 bool a[N],给定 m 个约束条件 ax⊕ay=r。
我们引入一个概念“命题”,命题“ai=b”简记为 (i,b)。
我们可以用并查集维护命题的等价关系。
- ax⊕ay=0,则 (x,0)⇔(y,0),(x,1)⇔(y,1);
- ax⊕ay=1,则 (x,0)⇔(y,1),(x,1)⇔(y,0)。
有解当且仅当 ∀i∈{1,2,⋯,N},(x,0)⇎(x,1)。
显然不被约束的变量相互独立,一旦被直接/间接约束,一定绑在一块。
初始令 free←n,每次添加约束且约束两端相互独立时令 free←free−1 即可。
最终答案即为 2free。