충족 불가능하게 만들기
시간 제한2초메모리 제한512 MB
2-SAT 절들이 주어질 때 (p_a 또는 p_b) 꼴의 절을 최소 몇 개 추가해야 전체가 불만족 가능해지는지 구하고, 불가능하면 -1을 출력한다.
문제
보통 컴퓨터 과학자는 주어진 제약을 만족시키려고 한다. 이번에는 반대로 논리식 목록을 충족 불가능하게 만들어야 한다.
다음과 같은 형태의 논리식 목록이 주어진다.
각 는 true 또는 false 중 하나가 되는 명제다. 논리합 기호 는 논리 OR로 해석한다. 기호는 부정이며, 바로 뒤에 오는 명제의 값을 true에서 false로, false에서 true로 뒤집는다.
논리식 목록을 충족시킨다는 것은 각 명제에 true 또는 false를 할당해서 목록에 있는 모든 논리합이 true가 되게 하는 것이다.
당신이 할 일은 목록에 논리합을 추가해서 목록 전체를 충족 불가능하게 만드는 것이다. 단, 추가하는 논리합에는 부정 기호를 쓸 수 없다.
주어진 논리합과 추가하는 논리합 모두 항이 정확히 2개다.
입력
첫째 줄에 정수 과 이 공백으로 구분되어 주어진다 (). 은 명제의 개수, 은 논리합의 개수다.
다음 개 줄에는 각각 정수 와 가 공백으로 구분되어 주어지며 (), 번째 논리합을 이루는 두 명제를 나타낸다. 가 양수면 명제 를 뜻하고, 음수면 부정된 명제 를 뜻한다. 도 같은 방식으로 읽는다.
두 번째 예제 입력은 다음 논리식 목록에 대응한다.
출력
목록을 충족 불가능하게 만들려면 논리합을 최소 몇 개 더 추가해야 하는지, 그 개수를 한 줄에 정수 하나로 출력한다. 충족 불가능하게 만들 수 없으면 대신 을 출력한다. 추가하는 각 논리합은 명제 두 개로 이루어지며, 두 명제가 같아도 된다. 부정된 명제는 쓸 수 없다.
힌트
두 번째 예제에서는 를 추가하면 목록이 충족 불가능해진다.