만드는 중입니다

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

Fare and Balanced

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

요약
1번 교차로에서 N번 교차로로 가는 방향 도로망이 주어집니다. 모든 경로의 비용이 같아지도록 도로에 통행료를 매기고, 최종 비용을 최소로 만드는 문제입니다.
난이도

보통10점 중 7점

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

문제

교통 혼잡을 해결하는 일은 젊은 도시 계획가에게 쉽지 않은 과제다. 수많은 운전자가 저마다 다른 목적을 가지고 각자 선택해서 움직이면, 그 결과는 때로 예측 가능하고 때로는 무질서한 복잡한 시스템이 된다. 당신은 헌신적인 공무원으로서 여러 도로에 걸친 출근 시간대 교통을 최적화하는 임무를 맡았다.

모든 도로는 주거 지역과 도심 상업 지구 사이에 놓여 있다. 아침에 주거 지역에 사는 사람은 각자 상업 지구까지 가는 경로를 운전한다. 특정 도로의 아침 통근 교통은 한 방향으로만 흐르며, 어떤 경로에도 순환은 없다(아침 운전자는 되돌아가지 않는다).

도로마다 주행에 걸리는 시간이 다르므로 경로마다 빠르고 느린 차이가 생긴다. 운전자는 빠른 경로를 훨씬 더 선호하고, 그 결과 해당 도로에 혼잡이 생긴다. 교통량을 최대한 고르게 나누기 위해 일부 도로에 통행료를 부과하여, 모든 경로가 운전자가 체감하는 "비용"이 같아지도록 한다. 다만 운전자에게 지나친 불편을 주지 않도록, 어떤 경로를 택하더라도 같은 운전자가 통행료를 두 번 내서는 안 된다.

그림 5는 주거 지역(교차로 1)에서 도심 상업 지구(교차로 4)까지 경로를 이루는 도로 다섯 개를 보여 준다. 각 도로의 주행 비용은 굵은 파란색 글씨로 적혀 있다. 점선 화살표는 1에서 4까지 가능한 세 경로를 나타낸다. 처음에 경로의 비용은 10, 8, 12이다. 1과 4를 잇는 도로에 비용 2의 통행료를, 3과 4를 잇는 도로에 비용 4의 통행료를 더하면 각 경로의 비용이 모두 12가 된다.

그림 5: 교차로 1의 주거 지역과 교차로 4의 도심 상업 지구를 잇는 도로

시작점에서 도착점까지 모든 경로의 비용(주행 시간 비용 + 통행료)이 같고, 어떤 경로에도 통행료 도로가 둘 이상 포함되지 않도록 어느 도로에 통행료를 매길지, 각 통행료를 얼마로 할지 정해야 한다. 통행료는 최종 비용이 최소가 되도록 골라야 한다. 상황에 따라서는 위 조건을 만족하는 통행료를 매기는 것이 불가능할 수도 있다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 교차로의 수 NN (2 ≤ NN ≤ 50000)과 도로의 수 RR (1 ≤ RR ≤ 50000)이 적힌 줄로 시작한다. 이어지는 RR개의 줄에는 정수 xix_i, yiy_i, cic_i (1 ≤ xix_i, yiy_i ≤ NN, 1 ≤ cic_i ≤ 1000)가 주어진다. 이는 ii번 도로로 아침 교통이 교차로 xix_i에서 교차로 yiy_i로 가며, 기본 주행 시간 비용이 cic_i임을 뜻한다. 교차로 1은 출발지인 주거 지역이고, 교차로 NN은 목적지인 상업 지구다. 도로는 입력 순서대로 1부터 RR까지 번호가 붙는다. 모든 교차로는 1에서 NN까지 가는 경로에 속하며, 순환은 없다.

마지막 테스트 케이스 다음 줄에는 0 두 개가 적혀 있다.

출력

각 테스트 케이스마다 케이스 번호(1부터 시작), 통행료를 부과할 도로의 수 TT, 모든 경로의 최종 비용을 한 줄에 출력한다. 이어지는 TT개의 줄에는 도로 번호 ii와 그 도로에 부과할 양의 통행료를 출력한다. 최소 비용 해가 여러 개라면 어느 것을 출력해도 된다. 해가 없으면 No solution을 출력한다. 출력 형식은 예제 출력을 따른다.

예제1

  1. 예제 1

    입력
    4 5
    1 3 5
    3 2 1
    2 4 6
    1 4 10
    3 4 3
    3 4
    1 2 1
    1 2 2
    2 3 1
    2 3 2
    0 0
    
    예상 출력
    Case 1: 2 12
    4 2
    5 4
    Case 2: No solution