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

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

MST 카메라

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

요약
R행 C열 격자의 가중치 간선 가운데 질의로 주어진 부분 행렬 안의 간선만으로 N개 정점의 최소 신장 트리 가중치 합을 구하고, 트리가 없으면 -1을 출력합니다.
난이도

어려움10점 중 9점

유형
최소 신장 트리, 분할 정복, 유니온 파인드, 그래프
정답자
아직 제출이 없습니다

문제

최근 팀 대회에서 우리 팀이 최우수상을 받았고, 상품은 카메라였다. 평범한 카메라가 아니다. 제조사 "MST"는 이 카메라에 특별한 기능이 있다고 주장한다. 무방향 그래프의 간선 집합을 카메라로 찍으면, 그 간선으로 트리를 만들 수 있는지 판정한다. 간선에 가중치가 있으면 간선 가중치의 합이 최소인 트리도 찾는다. RR행 CC열의 행렬이 있고, 그래프의 노드는 NN개다. 행렬의 (i,j)(i,j) 칸마다 무방향 간선이 하나씩 있다. 이 간선은 노드 Ui,jU_{i,j}와 Vi,jV_{i,j}를 잇고, 가중치는 Wi,jW_{i,j}다. 쿼리는 부분 행렬로 주어진다. 각 쿼리마다 노드 NN개와 부분 행렬 안의 간선으로 그래프를 만든다. 이 그래프에 최소 신장 트리가 존재하면 간선 가중치의 합을 출력하고, 존재하지 않으면 "-1"을 출력한다. 모든 쿼리는 23≤X2−X1+1Y2−Y1+1≤32\frac{2}{3} \leq \frac{X_2-X_1+1}{Y_2-Y_1+1} \leq \frac{3}{2}을 만족한다.

입력

첫 줄에 NN, RR, CC, QQ가 주어진다(2≤N≤402 \leq N \leq 40, 1≤R,C≤2501 \leq R,C \leq 250, 1≤Q≤2000001 \leq Q \leq 200000). 이어지는 RR개의 줄은 행렬을 나타낸다. ii번째 줄에는 Ui,1,Vi,1,Wi,1,…,Ui,C,Vi,C,Wi,CU_{i,1}, V_{i,1}, W_{i,1}, \dots, U_{i,C}, V_{i,C}, W_{i,C} 순서로 3C3C개의 수가 있다(0≤Wi,j≤655350 \leq W_{i,j} \leq 65535). 마지막 QQ개의 줄에는 각각 쿼리 X1,Y1,X2,Y2X_1, Y_1, X_2, Y_2가 있다(1≤X1≤X2≤R1 \leq X_1 \leq X_2 \leq R, 1≤Y1≤Y2≤C1 \leq Y_1 \leq Y_2 \leq C). 부분 행렬의 왼쪽 위 모서리는 (X1,Y1)(X_1,Y_1)이고, 오른쪽 아래 모서리는 (X2,Y2)(X_2,Y_2)다.

출력

QQ개의 줄을 출력한다. ii번째 줄에는 ii번째 쿼리의 답을 출력한다. 최소 신장 트리가 존재하면 간선 가중치의 합을, 존재하지 않으면 "-1"을 출력한다.

예제1

  1. 예제 1

    입력
    4 3 4 3
    1 2 1 1 2 2 1 2 3 1 2 100
    2 3 2 2 3 3 2 3 1 2 3 101
    3 4 3 3 4 1 3 4 2 3 4 102
    1 1 3 4
    1 2 3 3
    3 4 3 4
    
    예상 출력
    3
    4
    -1