만드는 중입니다

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

신호등

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

요약
신호 주기가 P초인 교차로마다 진입한 도로에 따라 정해진 순서로만 통과할 때 출발 교차로에서 도착 교차로까지 가장 빠른 이동 시간을 구합니다.
난이도

보통10점 중 7점

유형
최단 경로, 그래프
정답자
아직 제출이 없습니다

문제

다익스트라 알고리즘은 음수 가중치를 갖는 변이 없는 그래프에서 출발점과 도착점 사이의 최단 경로를 구한다. 꼭짓점이 교차로를 나타내고 변이 두 교차로를 잇는 도로의 길이를 나타내면, 두 교차로 사이의 최단 경로를 이 알고리즘으로 구할 수 있다.

그러나 실제 도로에는 교차로마다 신호등이 있어서 교차로를 언제나 지날 수 있는 것은 아니다. 그래서 최단 경로가 아닌 길로 우회하는 편이 목적지에 더 빨리 닿기도 한다.

신호등은 PP초를 주기로 신호가 바뀐다. 교차로 ii와 연결된 교차로의 번호를 x1<x2<⋯<xnx_1 < x_2 < \cdots < x_n이라 하자. 처음 PP초 동안은 x1x_1에서 온 차만 ii를 거쳐 x2,…,xnx_2, \ldots, x_n으로 갈 수 있고, 그다음 PP초 동안은 x2x_2에서 온 차만 ii를 거쳐 x1,x3,…,xnx_1, x_3, \ldots, x_n으로 갈 수 있다. 이렇게 교차로 번호가 작은 쪽부터 PP초씩 차례로 ii를 지날 권한을 얻고, n×Pn \times P초가 지나면 다시 x1x_1 차례로 돌아온다. xkx_k에서 온 차는 xkx_k를 뺀 나머지 교차로로만 갈 수 있다.

(a)(b)(c)

예를 들어 교차로 3번과 연결된 교차로가 1번, 4번, 5번이면, 0초 이상 PP초 미만에는 그림 (a)처럼 1번 교차로에서 온 차가 3번 교차로를 거쳐 다른 교차로로 갈 수 있다. PP초 이상 2P2P초 미만에는 그림 (b)처럼 4번 교차로에서 온 차가 갈 수 있고, 2P2P초 이상 3P3P초 미만에는 그림 (c)처럼 5번 교차로에서 온 차가 1번이나 4번 교차로로 갈 수 있다. 3P3P초 이상 4P4P초 미만에는 다시 (a)와 같은 상태가 된다.

다음 조건에서 자동차가 출발 교차로에서 도착 교차로까지 가는 최소 시간을 구한다.

  • 자동차는 1초에 길이 1만큼 이동한다.
  • 출발지와 목적지는 모두 교차로다.
  • 모든 신호등은 자동차가 출발하는 순간에 함께 동작을 시작한다.
  • 출발 교차로와 도착 교차로에서는 신호를 기다리지 않는다.
  • 어떤 교차로에서 같은 교차로로 돌아오는 도로는 없다.

예를 들어 위 도로망에서 출발 교차로가 1번이고 도착 교차로가 4번이라 하자. 1번 교차로에서 출발한 차는 10초에 3번 교차로에 도착한다. 3번 교차로의 주기가 2초라면 10초 이상 12초 미만에는 5번 교차로에서 온 차만 도로를 이용할 수 있으므로, 1번 교차로에서 온 차는 12초까지 기다려야 한다. 따라서 1번 교차로에서 4번 교차로까지 가는 데 14초가 걸린다.

모든 도로의 길이와 신호등 주기가 주어질 때, 출발 교차로에서 도착 교차로까지 가는 최소 시간을 구하여라.

입력

첫째 줄에 테스트 케이스의 개수 TT (1≤T≤101 \le T \le 10)가 주어진다.

각 테스트 케이스의 첫째 줄에는 교차로의 수 NN (1≤N≤1051 \le N \le 10^5), 도로의 수 MM (0≤M≤1050 \le M \le 10^5), 출발 교차로의 번호 SS (1≤S≤N1 \le S \le N), 도착 교차로의 번호 DD (1≤D≤N1 \le D \le N)가 주어진다.

이어지는 MM개의 줄에는 aa, bb, cc (1≤a,b≤N1 \le a, b \le N, a≠ba \ne b, 1≤c≤1051 \le c \le 10^5)가 주어진다. aa번 교차로와 bb번 교차로를 잇는 길이 cc의 양방향 도로가 있다는 뜻이다.

그다음 줄에는 각 교차로의 신호등 주기 P1,P2,…,PNP_1, P_2, \ldots, P_N (1≤Pi≤1001 \le P_i \le 100)이 공백 하나로 구분되어 주어진다.

두 교차로 사이에 도로는 많아야 하나 있다.

출력

각 테스트 케이스마다 출발 교차로에서 도착 교차로까지 가는 데 걸리는 최소 시간을 한 줄에 출력한다. 결과가 32비트 정수 범위를 넘을 수 있으므로 64비트 정수형을 쓰기를 권한다. 도착 교차로로 갈 수 있는 경로가 없으면 -1을 출력한다.

예제3

  1. 예제 1

    입력
    4
    5 5 1 5
    1 2 6
    3 2 6
    3 4 6
    4 5 6
    3 5 6
    10 10 10 10 10
    3 1 3 1
    1 2 3
    10 10 10
    5 5 1 5
    1 2 6
    3 2 6
    3 4 6
    4 5 6
    3 5 6
    5 5 5 5 5
    1 0 1 1
    3
    
    예상 출력
    36
    -1
    22
    0
    
  2. 예제 2

    입력
    1
    5 3 1 4
    1 3 10
    3 4 2
    3 5 4
    1 1 2 1 1
    
    예상 출력
    14
    
  3. 예제 3

    입력
    1
    6 6 5 6
    1 2 1
    2 3 1
    2 5 1
    2 6 1
    4 5 10
    4 6 10
    1 100 1 100 1 1
    
    예상 출력
    20