왕복 여행

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

요약
마을 1에서 n으로 내려가지 않는 경로와 다시 올라가지 않는 귀환 경로를 찾되, 각 마을의 비자 요금은 처음 방문할 때만 내고 도로 비용과 요금의 합을 최소화한다.
난이도

보통10점 중 7점

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

문제

짐(Jim)은 산악 지역의 어느 마을에 사는 가장 친한 친구를 만나러 가려고 한다. 그는 먼저 고향을 떠나 목적지 마을로 가는데, 이를 가는 여정(go)이라 한다. 그런 다음 고향으로 돌아오는데, 이를 오는 여정(return)이라 한다. 이 여행 전체의 최소 비용을 구하는 프로그램을 작성하라. 전체 비용은 가는 여정의 비용과 오는 여정의 비용의 합이다.

마을들은 고향과 목적지를 포함하는 하나의 도로망을 이룬다. 모든 도로는 일방통행이며, 정해진 방향으로만 지날 수 있다. 도로를 지날 때마다 정해진 비용이 든다.

도로 비용 외에도, 지나는 각 마을에서는 비자 요금을 내야 한다. 이는 비자 요금이므로 같은 마을을 처음 방문할 때만 내면 되고, 두 번째 이후의 방문에는 요금이 들지 않는다.

각 마을에는 고도가 있다. 가는 여정에서는 내려갈 수 없다. 즉 마을 aa에서 bb로 이동할 때 aa의 고도가 bb의 고도보다 높으면 안 된다. 오는 여정에서는 반대로 올라갈 수 없다. 즉 aa의 고도가 bb의 고도보다 낮으면 안 된다. aa와 bb의 고도가 같으면 도로 a→ba \to b는 두 여정 모두에서 사용할 수 있다.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.

n m
d2 e2
d3 e3
...
d(n-1) e(n-1)
a1 b1 c1
a2 b2 c2
...
am bm cm

모든 값은 음이 아닌 정수이며, 한 줄 안의 값들은 공백 하나로 구분된다.

nn은 마을의 수, mm은 일방통행 도로의 수이며 2≤n≤502 \le n \le 50, 0≤m≤n(n−1)0 \le m \le n(n-1)이다. 마을은 11번부터 nn번까지 번호가 매겨진다. 11번 마을이 고향, nn번 마을이 목적지이다.

2≤i≤n−12 \le i \le n-1인 각 마을 ii에 대해 did_i는 비자 요금, eie_i는 고도이며 1≤di≤10001 \le d_i \le 1000, 1≤ei≤9991 \le e_i \le 999이다. 11번과 nn번 마을은 비자 요금이 없다. 11번 마을의 고도는 00, nn번 마을의 고도는 10001000이다. 여러 마을이 같은 고도를 가질 수 있으나, 하나의 고도를 공유하는 마을은 최대 1010개이다.

jj번째 도로는 마을 aja_j에서 bjb_j로 이어지며 비용은 cjc_j이고, 1≤aj≤n1 \le a_j \le n, 1≤bj≤n1 \le b_j \le n, 1≤cj≤10001 \le c_j \le 1000이다. aja_j에서 bjb_j로는 갈 수 있지만, 별도의 도로가 주어지지 않는 한 bjb_j에서 aja_j로는 갈 수 없다. 서로 다른 두 도로가 같은 (출발, 도착) 쌍을 갖지 않으며, 자기 자신으로 이어지는 도로도 없다.

마지막 데이터셋 다음에는 공백으로 구분된 두 개의 00이 담긴 줄이 온다. 이 줄은 처리 대상이 아니다.

출력

각 데이터셋에 대해, 비자 요금을 포함한 여행의 최소 총비용을 한 줄에 출력한다. 유효한 여행이 존재하지 않으면 −1-1을 출력한다.

예제1

  1. 예제 1

    입력
    3 6
    3 1
    1 2 1
    2 3 1
    3 2 1
    2 1 1
    1 3 4
    3 1 4
    3 6
    5 1
    1 2 1
    2 3 1
    3 2 1
    2 1 1
    1 3 4
    3 1 4
    4 5
    3 1
    3 1
    1 2 5
    2 3 5
    3 4 5
    4 2 5
    3 1 5
    2 1
    2 1 1
    0 0
    
    예상 출력
    7
    8
    36
    -1