최단 경로들

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

요약
주어진 최단 경로 위의 각 간선을 하나씩 닫았을 때 a에서 b까지의 최단 경로 길이를 각각 구한다.
난이도

어려움10점 중 8점

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

문제

Nikola는 Bit 마을에 살고, Hex 마을에 사는 Anita와 사귀고 있다. Nikola는 주변 지도를 훤히 알고 있어서 두 마을을 잇는 최단 경로 하나를 찾아 두었고, 이 경로를 ‘행운의 경로’라고 부른다. 지도는 서로 다른 마을들을 잇는 양방향 도로들의 집합으로 주어진다.

어느 날 대통령이 도로 공사를 하기로 했다. 나라의 교통을 유지하기 위해 하루에 도로를 딱 하나만 닫는다.

행운의 경로 위에 있는 각 도로에 대해, 그 도로가 닫혔을 때 Nikola의 마을에서 Anita의 마을까지 가는 최단 경로의 길이를 구하라.

입력

첫째 줄에 네 정수 nn, mm, aa, bb가 주어진다. nn은 마을의 수, mm은 도로의 수, aa는 Nikola가 사는 Bit 마을의 번호, bb는 Anita가 사는 Hex 마을의 번호이다.

마을에는 11부터 nn까지 번호가 매겨져 있다. 이어지는 mm개의 줄에는 각각 세 정수 uu, vv, ww가 주어지며, 마을 uu와 마을 vv가 길이 ww인 도로로 연결되어 있음을 뜻한다.

마지막 줄에는 정수 kk와 kk개의 마을 번호 v1,v2,…,vkv_1, v_2, \ldots, v_k가 주어진다(v1=av_1 = a, vk=bv_k = b). 이는 Nikola의 행운의 경로를 나타낸다.

출력

각 t=1,2,…,k−1t = 1, 2, \ldots, k-1에 대해 한 줄씩, 도로 (vt,vt+1)(v_t, v_{t+1})이 닫혔을 때 마을 aa에서 마을 bb까지의 최단 경로 길이를 출력한다. 경로가 존재하지 않으면 −1-1을 출력한다.

제한

  • 1≤n≤20001 \le n \le 2000, 1≤m≤1000001 \le m \le 100000
  • 1≤a,b≤n1 \le a, b \le n
  • 1≤w≤1000001 \le w \le 100000
  • 서로 다른 두 마을 사이에는 도로가 최대 하나 존재한다.
  • 주어지는 행운의 경로는 마을 aa에서 마을 bb까지의 최단 경로 중 하나이다.

힌트

예제3

  1. 예제 1

    입력
    5 6 1 5
    1 2 1
    2 3 3
    2 5 100
    3 4 3
    3 5 5
    4 5 3
    4 1 2 3 5
    
    예상 출력
    -1
    101
    10
    
  2. 예제 2

    입력
    3 3 1 3
    1 2 1
    2 3 1
    1 3 5
    3 1 2 3
    
    예상 출력
    5
    5
    
  3. 예제 3

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