2-SATを解きます。 変数 に関して、
というクローズを足し、これをすべて満たす変数の割当があるかを解きます。
two_sat ts(int n)
変数の2-SATを作ります。
制約
計算量
void ts.add_clause(int i, bool f, int j, bool g)
というクローズを足します。
制約
計算量
bool ts.satisfiable()
条件を足す割当が存在するかどうかを判定する。割当が存在するならばtrue
、そうでないならfalse
を返す。
制約
計算量
足した制約の個数を として
vector<bool> ts.answer()
最後に呼んだ satisfiable
の、クローズを満たす割当を返す。satisfiable
を呼ぶ前や、satisfiable
で割当が存在しなかったときにこの関数を呼ぶと、中身が未定義の長さ の vectorを返す。
計算量