티켓 투 라이드

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

요약
가중치 그래프와 네 쌍의 도시가 주어질 때 네 쌍을 모두 연결하는 부분그래프의 최소 총 비용을 구합니다.
난이도

어려움10점 중 8점

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

문제

티켓 투 라이드는 최대 5명이 함께 즐기는 보드게임입니다. 목표는 자신의 기차 노선을 완성하고, 동시에 상대가 노선을 완성하지 못하도록 방해하는 것입니다. 게임을 시작할 때 각 플레이어에게는 네 개의 노선 과제가 주어집니다. 각 과제에는 난이도에 따른 점수가 매겨져 있으며(예를 들어 스톡홀름과 도쿄를 잇는 노선은 보통 스톡홀름과 위트레흐트를 잇는 노선보다 점수가 높습니다), 플레이어는 원하는 만큼 과제를 버릴 수 있습니다. 게임이 끝나면 완성한 과제에 대해서는 점수를, 완성하지 못한 과제에 대해서는 벌점을 받습니다.

하나의 과제는 여러 개의 짧은 철도 구간(route)을 이어서 연결해야 하는 두 도시로 이루어집니다. 각 구간은 정해진 비용을 내고 점유(claim)할 수 있지만, 구간의 수가 한정되어 있고 한 플레이어가 어떤 구간을 점유하면 다른 플레이어는 그 구간을 점유할 수 없습니다. 어떤 플레이어가 자신이 점유한 구간만으로 두 도시를 잇는 경로를 만들 수 있으면, 그 두 도시 사이의 노선을 성공적으로 완성한 것입니다. 문제를 단순화하기 위해 구간을 실제로 점유하는 과정이나 추가 점수 규칙 등 다른 요소는 모두 무시합니다.

예를 들어 스톡홀름과 암스테르담을 잇는 과제를 받았다면, 스톡홀름–코펜하겐 구간과 코펜하겐–암스테르담 구간을 점유하려 할 것입니다. 하지만 다른 플레이어가 코펜하겐–스톡홀름 구간을 먼저 점유해 버리면, 예컨대 오슬로를 거쳐 코펜하겐으로 가는 식으로 다른 구간을 이용해야 합니다.

이 문제에서는 네 개의 과제를 모두 완성하려는 다소 무모한 전략을 생각합니다. 이것이 얼마나 어려운지 미리 가늠해 보기 위해, 다른 플레이어가 전혀 방해하지 않는다고 가정하고 네 노선을 모두 구성하는 데 드는 최소 비용을 계산하려 합니다. 이 최소 비용을 구하는 프로그램을 작성하세요.

입력

입력은 분석할 여러 개의 게임으로 구성됩니다(최대 20개). 각 게임은 두 정수 1≤n≤301 \le n \le 30, 0≤m≤10000 \le m \le 1000 으로 시작하며, 각각 지도의 도시 수와 철도 구간 수를 뜻합니다. 이어서 nn개의 줄에 도시 이름이 하나씩 주어집니다. 도시 이름은 최대 20글자이고 소문자 알파벳('a'-'z')으로만 이루어집니다.

그 다음 mm개의 줄에는 각각 서로 다른 두 도시의 이름과 정수 1≤c≤100001 \le c \le 10000 이 주어지며, 두 도시 사이에 비용 cc인 철도 구간이 있음을 뜻합니다. 같은 두 도시 사이에 여러 개의 구간이 있을 수 있습니다. 어떤 도시에서든 다른 어떤 도시로도 노선을 구성할 수 있음이 항상 보장됩니다.

마지막으로 네 개의 줄에 각각 두 도시의 이름이 주어지며, 이것이 네 개의 노선 과제입니다.

입력은 n=m=0n = m = 0 인 게임으로 끝나며, 이 게임은 처리하지 않습니다.

출력

각 게임마다 네 노선을 모두 구성하는 데 드는 최소 비용을 한 줄에 하나의 정수로 출력하세요.

힌트

티켓 투 라이드(Ticket to Ride)의 저작권은 Days of Wonder, Inc.에 있습니다.

예제4

  1. 예제 1

    입력
    10 15
    stockholm
    amsterdam
    london
    berlin
    copenhagen
    oslo
    helsinki
    dublin
    reykjavik
    brussels
    oslo stockholm 415
    stockholm helsinki 396
    oslo london 1153
    oslo copenhagen 485
    stockholm copenhagen 522
    copenhagen berlin 354
    copenhagen amsterdam 622
    helsinki berlin 1107
    london amsterdam 356
    berlin amsterdam 575
    london dublin 463
    reykjavik dublin 1498
    reykjavik oslo 1748
    london brussels 318
    brussels amsterdam 173
    stockholm amsterdam
    oslo london
    reykjavik dublin
    brussels helsinki
    2 1
    first
    second
    first second 10
    first first
    first first
    second first
    first first
    0 0
    
    예상 출력
    3907
    10
    
  2. 예제 2

    입력
    2 1
    a
    b
    a b 5
    a a
    a a
    b b
    b b
    0 0
    
    예상 출력
    0
    
  3. 예제 3

    입력
    2 1
    first
    second
    first second 10
    first second
    first second
    first second
    first second
    0 0
    
    예상 출력
    10
    
  4. 예제 4

    입력
    3 3
    a
    b
    c
    a b 3
    b c 4
    a c 100
    a c
    a a
    b b
    c c
    0 0
    
    예상 출력
    7