아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

A Hard Problem

시간 제한20초메모리 제한1024 MB

요약
비트 단위 등식 제약을 지키면서 그래프 간선의 xor popcount 가중치 합이 최소가 되도록 미지의 노드 값을 정한다.
난이도

어려움10점 중 8점

유형
비트 연산, 그래프, 동적 계획법, 완전 탐색
정답자
아직 제출이 없습니다

문제

nn개의 정점과 mm개의 간선으로 이루어진 단순 무향 그래프가 주어진다. 정점은 11부터 nn까지, 간선은 11부터 mm까지 번호가 매겨진다. 정점 ii는 음이 아닌 정수 값 ViV_i를 가지며, 간선 {u,v}\{u, v\}의 가중치 Wu,vW_{u,v}는 ∥Vu⊕Vv∥\lVert V_u \oplus V_v \rVert로 정의된다. 여기서 ⊕\oplus는 배타적 논리합 연산자(C 언어의 ^에 해당)이고, ∥x∥\lVert x \rVert는 음이 아닌 정수 xx의 이진 표현에 포함된 1의 개수다.

정점 값 V1,V2,…,VnV_1, V_2, \ldots, V_n은 qq개의 제약을 만족해야 한다. 각 제약은 5-튜플 (t,u,i,v,j)(t, u, i, v, j)로 나타낼 수 있다.

  • t=0t = 0이면 getBit(Vu,i)=getBit(Vv,j)\textit{getBit}(V_u, i) = \textit{getBit}(V_v, j)
  • t=1t = 1이면 getBit(Vu,i)≠getBit(Vv,j)\textit{getBit}(V_u, i) \neq \textit{getBit}(V_v, j)

여기서 함수 getBit(x,i)\textit{getBit}(x, i)는 xx의 (i+1)(i + 1)번째로 낮은 비트를 반환한다. 예를 들어 getBit(11,0)\textit{getBit}(11, 0)은 1이고 getBit(11,2)=0\textit{getBit}(11, 2) = 0이다. C 언어에서 xx가 32비트 부호 없는 정수이고 ii가 31 이하의 음이 아닌 정수라면, getBit(x,i)\textit{getBit}(x, i)는 ((x >> i) & 1U)로 계산할 수 있다.

아쉽게도 일부 정점의 값이 지금은 없다. 당신의 과제는 주어진 제약을 위반하지 않으면서 ∑{u,v}∈EWu,v\sum_{\{u,v\} \in E} W_{u,v}를 최소화하도록 그 정점들에 새 값을 할당하는 것이다. 이 과제를 해결하는 프로그램을 작성하라.

입력

입력은 다섯 부분으로 이루어진다. 첫 번째 부분은 한 줄로, 두 양의 정수 nn과 mm을 포함한다. nn은 정점의 수, mm은 간선의 수다. 두 번째 부분은 mm개의 줄로 이루어진다. 각 줄은 두 정수 uu와 vv를 포함하며, 주어진 그래프의 간선 {u,v}\{u, v\}를 나타낸다. 세 번째 부분은 한 줄로 이루어진다. 그 줄은 공백으로 구분된 nn개의 정수 x1,x2,…,xnx_1, x_2, \ldots, x_n으로 이루어진다. 임의의 k∈{1,2,…,n}k \in \{1, 2, \ldots, n\}에 대해 정점 값 VkV_k가 없으면 xkx_k는 -1이고, 그렇지 않으면 VkV_k는 xkx_k이다. 네 번째 부분은 하나의 정수 qq를 포함하며, 제약의 수를 나타낸다. 다섯 번째 부분은 qq개의 줄로 이루어지고, 각 줄은 공백으로 구분된 다섯 개의 정수 t,u,i,v,jt, u, i, v, j를 포함하며 (t,u,i,v,j)(t, u, i, v, j)가 제약임을 나타낸다.

출력

qq개의 제약 아래에서 최솟값을 정수로 출력한다. 모든 제약을 만족하는 것이 불가능하면 -1을 출력한다.

제한

  • 1≤n≤10001 \le n \le 1000
  • 1≤m≤50001 \le m \le 5000
  • −1≤Vi<216-1 \le V_i < 2^{16}
  • 0≤q≤80 \le q \le 8
  • t∈{0,1}t \in \{0, 1\}
  • 0≤u,v<n0 \le u, v < n
  • 0≤i,j<160 \le i, j < 16

예제2

  1. 예제 1

    입력
    4 4
    1 3
    1 2
    3 2
    0 3
    -1 -1 60091 51514
    2
    1 2 0 1 5
    0 2 6 0 15
    
    예상 출력
    13
    
  2. 예제 2

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