만드는 중입니다

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

이차 정수 계획 문제

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

요약
각 원소가 주어진 구간에 들고 두 원소의 차이가 제한되는 정수 수열 가운데, 질의마다 주어진 가중치로 최대 무게를 구합니다.
난이도

어려움10점 중 8점

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

문제

이 문제는 잘 알려진 NP 문제인 이차 정수 계획 문제를 푸는 것이다.

이차 정수 계획 문제에는 변수가 있다. 아래 조건을 모두 만족하는 길이 nn의 정수 수열 (x1,x2,…,xn)(x_1, x_2, \ldots, x_n)을 구해야 한다.

이차 정수 계획 문제에는 제약 조건도 있다. 주어진 수열은 다음 두 종류의 제약 조건을 모두 만족해야 한다.

  1. 양의 정수 kk (3≤k≤53 \le k \le 5)와 nn개의 구간 [li,ri][l_i, r_i] (1≤i≤n1 \le i \le n)가 주어진다. 이때 1≤li≤ri≤k1 \le l_i \le r_i \le k이다. 모든 1≤i≤n1 \le i \le n에 대해 li≤xi≤ril_i \le x_i \le r_i를 만족해야 한다.
  2. mm개의 세 쌍 (pj,qj,bj)(p_j, q_j, b_j)가 주어진다. 모든 1≤j≤m1 \le j \le m에 대해 ∣xpj−xqj∣≤bj|x_{p_j} - x_{q_j}| \le b_j를 만족해야 한다.

목적 함수도 있다. 가중치 v2,v3,…,vk−1v_2, v_3, \ldots, v_{k-1} (k−2k-2개)이 주어진다. cic_i는 수열에서 값이 ii인 원소의 개수이다. GG는 ∣xi−xj∣≤1|x_i - x_j| \le 1을 만족하는 순서쌍 (i,j)(i, j)의 개수이며, 1≤i,j≤n1 \le i, j \le n이다. i≠ji \ne j이면 (i,j)(i, j)와 (j,i)(j, i)는 서로 다른 쌍으로 센다. 수열 x1,x2,…,xnx_1, x_2, \ldots, x_n의 가중치는 다음과 같다.

W(x1,x2,…,xn)=106G+∑i=2k−1civiW(x_1, x_2, \ldots, x_n) = 10^{6} G + \sum_{i = 2}^{k - 1} c_i v_i

제약 조건을 만족하는 수열 가운데 가중치가 최대인 것을 찾아야 한다.

이차 정수 계획 문제에서 질의가 여러 번 필요한 것은 아니지만, 이 문제에서는 qq개의 질의가 주어진다. 각 질의마다 가중치 v2,v3,…,vk−1v_2, v_3, \ldots, v_{k-1}이 다르게 주어지며, 그때마다 제약을 만족하는 최대 가중치 수열을 찾아야 한다. 출력을 줄이기 위해 그 수열의 가중치만 출력하면 된다. 데이터에는 조건을 만족하는 수열이 적어도 하나 존재함이 보장된다.

입력

여러 개의 테스트 데이터가 주어진다. 첫 줄에는 테스트 케이스 번호 CC와 데이터 세트의 개수 TT가 주어진다. C=0C = 0이면 해당 데이터 세트는 예제이다.

각 테스트 케이스는 다음과 같이 주어진다.

  • 첫 줄에 정수 k,n,m,qk, n, m, q가 주어진다. 각각 수열의 값 범위, 수열의 길이, 변수 사이 제약의 개수, 질의의 개수이다.
  • 다음 nn개 줄에 정수 lil_i, rir_i가 주어진다. ii번째 원소의 값 범위이다.
  • 다음 mm개 줄에 정수 pjp_j, qjq_j, bjb_j가 주어진다. 한 쌍의 변수에 대한 제약이다.
  • 다음 qq개 줄에 각각 k−2k-2개의 음이 아닌 정수 v2,v3,…,vk−1v_2, v_3, \ldots, v_{k-1}이 주어진다. 한 질의의 가중치 매개변수이다.

출력

각 데이터 세트의 각 질의마다 최대 가중치를 한 줄에 출력한다.

제한

∑q\sum q는 한 테스트 포인트 안에 있는 모든 데이터 세트의 qq를 합한 값이다. 모든 테스트 포인트에 대해 다음이 성립한다.

  • 1≤T≤6001 \le T \le 600
  • ii번째 (1≤i≤T1 \le i \le T) 테스트 데이터에서 1≤n≤max⁡(T/i,2log⁡2T)1 \le n \le \max(T/i, 2 \log_2 T)
  • 3≤k≤53 \le k \le 5, 0≤m≤3n0 \le m \le 3n, 1≤q1 \le q, ∑q≤3×105\sum q \le 3 \times 10^5
  • 1≤li≤ri≤k1 \le l_i \le r_i \le k
  • 1≤pj,qj≤n1 \le p_j, q_j \le n, 0≤bj<k0 \le b_j < k
  • 0≤v2,…,vk−1≤10120 \le v_2, \ldots, v_{k-1} \le 10^{12}
케이스T≤T \lek=k=∑q≤\sum q \le특수 조건
1101033200200없음
2600600333×1053 \times 10^5없음
3101044200200없음
4600600443×1053 \times 10^5없음
5101055300300없음
6151555500500없음
7252555750750없음
850505510001000없음
980805515001500없음
101201205520002000없음
112002005580008000A
12400400553×1043 \times 10^4없음
13600600552×1052 \times 10^5없음
142002005580008000B
15400400553×1043 \times 10^4없음
16600600552×1052 \times 10^5없음
171201205510510^5C
18150150552×1052 \times 10^5없음
19180180553×1053 \times 10^5없음
20300300555×1045 \times 10^4없음
214504505510510^5없음
22600600553×1053 \times 10^5없음
  • 특수 조건 A: m=0m = 0이다.
  • 특수 조건 B: m≤10m \le 10이고, 한 테스트 포인트의 모든 데이터 세트에 걸친 mm의 합은 200200을 넘지 않는다.
  • 특수 조건 C: 데이터는 무작위로 생성된다. 각 데이터 세트마다 먼저 매개변수 k,n,m,qk, n, m, q와 pk−1≠0p_{k-1} \ne 0인 음이 아닌 정수 p0,p1,…,pk−1p_0, p_1, \ldots, p_{k-1}을 정한다. 그다음 다음 규칙으로 데이터를 만든다.
    • 각 1≤i≤n1 \le i \le n에 대해 x,y∈[1,k]x, y \in [1, k]를 독립적으로 균등하게 뽑는다. li=min⁡(x,y)l_i = \min(x, y), ri=max⁡(x,y)r_i = \max(x, y)로 둔다.
    • 세 쌍이 mm개가 될 때까지 다음을 반복한다.
      • u,v∈[1,n]u, v \in [1, n]을 독립적으로 균등하게 뽑는다.
      • pp를 가중치로 하여 ww를 뽑는다. 0≤i≤k−10 \le i \le k-1에 대해 w=iw = i일 확률은 pip0+p1+⋯+pk−1\frac{p_i}{p_0 + p_1 + \cdots + p_{k-1}}이다.
      • (u,v,w)(u, v, w)를 추가하면 유효한 수열이 없어지면 이 세 쌍을 버린다. 그렇지 않으면 추가한다.
    • 각 질의의 v2,…,vk−1v_2, \ldots, v_{k-1}은 [0,1012][0, 10^{12}]에서 독립적으로 균등하게 뽑는다.

예제3

  1. 예제 1

    입력
    0 5
    3 5 2 2
    1 1
    1 2
    2 3
    1 3
    3 3
    1 4 0
    2 3 1
    0
    1000000
    3 1 0 1
    1 1
    0
    3 1 0 1
    1 1
    0
    3 1 0 1
    1 1
    0
    3 1 0 1
    1 1
    0
    
    예상 출력
    21000000
    23000000
    1000000
    1000000
    1000000
    1000000
    
  2. 예제 2

    입력
    0 4
    4 4 3 2
    4 4
    1 4
    2 3
    2 3
    1 2 1
    1 1 0
    3 4 0
    0 0
    100000000 0
    4 1 0 1
    1 1
    0 0
    4 1 0 1
    1 1
    0 0
    4 1 0 1
    1 1
    0 0
    
    예상 출력
    16000000
    212000000
    1000000
    1000000
    1000000
    
  3. 예제 3

    입력
    0 5
    5 5 4 3
    1 5
    1 3
    3 5
    3 4
    2 3
    1 2 1
    1 3 1
    1 4 1
    1 5 1
    2000000 2000000 2000000
    20000000 2000000 2000000
    20000000 2000000 20000000
    5 1 0 1
    1 1
    0 0 0
    5 1 0 1
    1 1
    0 0 0
    5 1 0 1
    1 1
    0 0 0
    5 1 0 1
    1 1
    0 0 0
    
    예상 출력
    35000000
    89000000
    99000000
    1000000
    1000000
    1000000
    1000000