«Конъюнкти́вная норма́льная фо́рма (КНФ) в булевой логике — нормальная форма, в которой булева формула имеет вид конъюнкции дизъюнкций литералов» (взято с https://ru.wikipedia.org/wiki/КНФ).
Иными словами, КНФ — это формула вида , где & обозначает логическое "И" (конъюнкцию), обозначает логическое "ИЛИ" (дизъюнкцию), а vij — это некоторые логические переменные или их отрицания. Каждое выражение в скобках называется дизъюнктом, а vij называются литералами.
Дана КНФ, в которой фигурируют переменные x1, ..., xm и их отрицания. Известно, что каждая переменная входит не более, чем в два дизъюнкта (суммарно как с отрицанием, так и без). Требуется определить выполнима ли эта КНФ, то есть, существуют ли такие значения переменных, при которых значение КНФ истинно. Если КНФ выполнима, то также требуется привести значения переменных, при которых КНФ истинна.
Гарантируется, что каждая переменная входит в каждый дизъюнкт не более одного раза.
В первой строчке заданы целые числа n и m (1 ≤ n, m ≤ 2·105) — количество дизъюнктов и количество переменных соответственно.
Далее в n строках заданы описания каждого из дизъюнктов. В i-й строке находится сначала число ki (ki ≥ 1) – количество литералов в i-м дизъюнкте, затем через пробел перечислены литералы vij (1 ≤ |vij| ≤ m). Литерал, соответствующий vij, это x|vij| либо с отрицанием, если vij отрицательно, либо без отрицания в противном случае.
Если КНФ не выполнима, выведите единственную строку "NO" (без кавычек), в противном случае выведите две строки: строку "YES" (без кавычек), а затем строку из m нулей или единиц — значения переменных в выполняющем наборе в порядке от x1 до xm.
2 2
2 1 -2
2 2 -1
YES
11
4 3
1 1
1 2
3 -1 -2 3
1 -3
NO
5 6
2 1 2
3 1 -2 3
4 -3 5 4 6
2 -6 -4
1 5
YES
100010
В первом тестовом примере задана формула . Один из возможных ответов — x1 = ИСТИНА, x2 = ИСТИНА.
Название |
---|