'가장 짧은' 경로 쌍

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

요약
0번 노드에서 N-1번 노드까지 정점과 간선이 겹치지 않는 두 경로의 총 비용을 최소화하거나 불가능함을 판별합니다.
난이도

어려움10점 중 8점

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

문제

어느 화학 회사에 특이한 최단 경로 문제가 있습니다.

화학 물질을 보관할 수 있는 NN개의 창고(정점)가 있고, 창고 쌍을 잇는 MM개의 개별 운송 수단(간선)이 있습니다. 각 운송 수단에는 비용이 있습니다. 보통의 문제라면 회사는 첫 번째 창고(00)에서 마지막 창고(N−1N - 1)로 화물 하나만 보내면 되고, 이는 쉽습니다. 그런데 이 회사의 문제는 더 어렵습니다. 두 가지 화학 물질을 첫 번째 창고(00)에서 마지막 창고(N−1N - 1)로 보내야 합니다. 이 화학 물질들은 위험해서 함께 둘 수 없습니다. 규정에 따르면 두 물질에 대해 같은 운송 수단을 사용할 수 없습니다. 또한 특수 보관 처리 없이는 두 물질을 같은 창고에 (아무리 짧은 시간이라도) 함께 둘 수 없으며, 이러한 처리는 첫 번째와 마지막 창고에서만 가능합니다.

먼저 회사는 이러한 제약 아래에서 두 물질을 모두 보내는 것이 가능한지 알아야 합니다. 그다음에는 두 물질을 첫 번째 창고에서 마지막 창고로 보내는 최소 비용을 구해야 합니다. 요컨대, 첫 번째 창고에서 마지막 창고로 가는, 전체 비용이 최소가 되는 완전히 분리된 두 경로가 필요합니다.

여러분의 프로그램은 그 최소 비용을 구하거나, 불가능하다면 운송을 할 수 없음을 분명히 밝히면 됩니다.

입력

입력은 여러 개의 케이스로 이루어집니다. 각 케이스의 첫 줄에는 NN과 MM이 주어지며, NN은 창고의 수, MM은 개별 운송 수단의 수입니다. NN은 6464보다 작고 MM은 1000010000보다 작다고 가정해도 됩니다. 이어지는 MM개의 줄에는 각각 세 값 ii, jj, vv가 주어지며, 각 줄은 하나의 고유한 운송 수단을 나타냅니다. ii와 jj는 두 창고의 인덱스이고 vv는 ii에서 jj로 가는 (음이 아닌 정수) 비용입니다. 이 운송 수단들은 방향이 있습니다. 즉 ii에서 jj로 비용 1010에 보낼 수 있다는 사실이 jj에서 ii로 보내는 것에 대해서는 아무것도 말해 주지 않습니다. 또한 어떤 두 창고 사이에 운송 방법이 여러 개 있을 수 있으며, 이 점이 여기서 중요할 수 있습니다. 두 개의 00으로 이루어진 줄은 데이터의 끝을 의미하며 처리하지 않아야 합니다.

출력

각 케이스마다 Instance #k: C 형태로 한 줄을 출력합니다. 여기서 kk는 (11부터 시작하는) 케이스 번호이고 CC는 두 화학 물질을 모두 보내는 최소 총비용입니다. 운송이 불가능하면 대신 Instance #k: Not possible을 출력합니다. 콜론 뒤에는 공백이 두 개 있음에 유의하세요.

예제1

  1. 예제 1

    입력
    2 1
    0 1 20
    2 3
    0 1 20
    0 1 20
    1 0 10
    4 6
    0 1 22
    1 3 11
    0 2 14
    2 3 26
    0 3 43
    0 3 58
    0 0 0
    
    예상 출력
    Instance #1:  Not possible
    Instance #2:  40
    Instance #3:  73