만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

충족 불가능하게 만들기

시간 제한2초메모리 제한512 MB

요약
2-SAT 절들이 주어질 때 (p_a 또는 p_b) 꼴의 절을 최소 몇 개 추가해야 전체가 불만족 가능해지는지 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
그래프, DFS, 그리디, 구현
정답자
아직 제출이 없습니다

문제

보통 컴퓨터 과학자는 주어진 제약을 만족시키려고 한다. 이번에는 반대로 논리식 목록을 충족 불가능하게 만들어야 한다.

다음과 같은 형태의 논리식 목록이 주어진다.

p1∨p2,¬p2∨p3,p3∨¬p4.p_1 \lor p_2, \qquad \neg p_2 \lor p_3, \qquad p_3 \lor \neg p_4.

각 pip_i는 true 또는 false 중 하나가 되는 명제다. 논리합 기호 ∨\lor는 논리 OR로 해석한다. ¬\neg 기호는 부정이며, 바로 뒤에 오는 명제의 값을 true에서 false로, false에서 true로 뒤집는다.

논리식 목록을 충족시킨다는 것은 각 명제에 true 또는 false를 할당해서 목록에 있는 모든 논리합이 true가 되게 하는 것이다.

당신이 할 일은 목록에 논리합을 추가해서 목록 전체를 충족 불가능하게 만드는 것이다. 단, 추가하는 논리합에는 부정 기호를 쓸 수 없다.

주어진 논리합과 추가하는 논리합 모두 항이 정확히 2개다.

입력

첫째 줄에 정수 nn과 mm이 공백으로 구분되어 주어진다 (1≤n,m≤20001 \le n, m \le 2000). nn은 명제의 개수, mm은 논리합의 개수다.

다음 mm개 줄에는 각각 정수 aia_i와 bib_i가 공백으로 구분되어 주어지며 (1≤∣ai∣,∣bi∣≤n1 \le |a_i|, |b_i| \le n), ii번째 논리합을 이루는 두 명제를 나타낸다. aia_i가 양수면 명제 paip_{a_i}를 뜻하고, 음수면 부정된 명제 ¬p∣ai∣\neg p_{|a_i|}를 뜻한다. bib_i도 같은 방식으로 읽는다.

두 번째 예제 입력은 다음 논리식 목록에 대응한다.

p1∨p2,¬p1∨¬p3,¬p2∨p3,p3∨¬p4,¬p2∨¬p3.p_1 \lor p_2, \quad \neg p_1 \lor \neg p_3, \quad \neg p_2 \lor p_3, \quad p_3 \lor \neg p_4, \quad \neg p_2 \lor \neg p_3.

출력

목록을 충족 불가능하게 만들려면 논리합을 최소 몇 개 더 추가해야 하는지, 그 개수를 한 줄에 정수 하나로 출력한다. 충족 불가능하게 만들 수 없으면 대신 −1-1을 출력한다. 추가하는 각 논리합은 명제 두 개로 이루어지며, 두 명제가 같아도 된다. 부정된 명제는 쓸 수 없다.

힌트

두 번째 예제에서는 p2∨p2p_2 \lor p_2를 추가하면 목록이 충족 불가능해진다.

예제2

  1. 예제 1

    입력
    2 1
    1 2
    
    예상 출력
    -1
    
  2. 예제 2

    입력
    4 5
    1 2
    -1 -3
    -2 3
    3 -4
    -2 -3
    
    예상 출력
    1