P4782 【模板】2-SAT

题目描述

有 $n$ 个布尔变量 $x_1\sim x_n$,另有 $m$ 个需要满足的条件,每个条件的形式都是 「$x_i$ 为 `true` / `false` 或 $x_j$ 为 `true` / `false`」。比如 「$x_1$ 为真或 $x_3$ 为假」、「$x_7$ 为假或 $x_2$ 为假」。 2-SAT 问题的目标是给每个变量赋值使得所有条件得到满足。

输入格式

第一行两个整数 $n$ 和 $m$,意义如题面所述。 接下来 $m$ 行每行 $4$ 个整数 $i$, $a$, $j$, $b$,表示 「$x_i$ 为 $a$ 或 $x_j$ 为 $b$」($a, b\in \{0,1\}$)

输出格式

如无解,输出 `IMPOSSIBLE`; 否则输出 `POSSIBLE`,下一行 $n$ 个整数 $x_1\sim x_n$($x_i\in\{0,1\}$),表示构造出的解。

说明/提示

$1\leq n, m\leq 10^6$ , 前 $3$ 个点卡小错误,后面 $5$ 个点卡效率。 由于数据随机生成,可能会含有 10 0 10 0 之类的坑,但按照最常规写法的写的标程没有出错,各个数据点卡什么的提示在标程里。