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

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

밤편지

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

요약
각 질의 (C, s, e)마다 중간에 거치는 집의 번호가 C 이상이면 안 된다는 조건에서 s에서 e까지 가는 최단 경로를 구한다.
난이도

어려움10점 중 8점

유형
최단 경로, 그래프, 동적 계획법, 정렬
정답자
아직 제출이 없습니다

문제

선린마을에는 밤마다 소중한 사람을 향해 반딧불을 보내는 전통이 있다.

선린마을은 11번부터 NN번까지의 번호가 붙은 NN채의 집과 집 사이를 잇는 양방향 도로로 이루어져 있다. 반딧불은 출발지와 도착지를 직접 연결하는 길이 없거나 더 효율적인 경로가 있는 경우 다른 집들을 거쳐갈 수 있다. XX번 집에는 2X2^{X} 방울의 이슬이 있으며, 반딧불은 출발지와 도착지를 제외하고 이동하는 동안 거치는 모든 집의 이슬을 반드시 모두 마셔야 한다. 안타깝게도 반딧불은 각각 상수 CC를 가지고 있으며, 이슬을 2C2^{C} 방울 이상 마시면 더 이상 날아가지 않고 잠들어 버린다.

선린마을의 주민 찬우는 이슬을 2C2^{C} 방울 이상 마실 수 없는 반딧불이 ss번 집에서 ee번 집으로 이동하는 데 걸리는 최소 시간이 QQ번이나 궁금해졌다.

찬우의 질문에 답하는 프로그램을 작성하자.

입력

첫째 줄에 집의 수 NN과 질문의 수 QQ가 주어진다.

둘째 줄부터 NN줄에 걸쳐 길의 정보가 주어진다. ii번 줄의 jj번째 수를 Di,jD_{i,j}라고 할 때, Di,jD_{i,j}가 양의 정수라면 ii번 집과 jj번 집을 잇는 길을 통과하는 시간을 의미하고, 00이라면 ii번 집과 jj번 집 사이를 연결하는 길이 없다는 의미이다.

다음 줄부터는 QQ개의 줄에 걸쳐 정수 CC, ss, ee가 공백으로 구분되어 주어진다.

이는 이슬을 2C2^{C} 방울 이상 마실 수 없는 반딧불이 ss번 집에서 ee번 집으로 이동하는 데 걸리는 최소 시간을 묻는 질문이다.

출력

QQ개의 줄에 걸쳐 질문의 답을 한 줄에 하나씩 순서대로 출력한다. 목적지에 도착하는 것이 불가능한 경우에는 −1-1을 출력한다.

제한

  • 2≤N≤3002 \leq N \leq 300
  • 1≤i,j≤N1 \leq i, j \leq N인 모든 ii, jj에 대해 0≤Di,j≤170 3240 \leq D_{i,j} \leq 170\,324, Di,j=Dj,iD_{i,j} = D_{j, i}, Di,i=0D_{i,i} = 0
  • 1≤Q≤500 0001 \leq Q \leq 500\,000
  • 1≤s,e≤N1 \leq s, e \leq N
  • 1≤C≤N+11 \leq C \leq N + 1

예제1

  1. 예제 1

    입력
    4 2
    0 100 1 0
    100 0 0 100
    1 0 0 1
    0 100 1 0
    3 1 4
    2 4 1
    
    예상 출력
    200
    -1