만드는 중입니다

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

용구슬 II

시간 제한4초메모리 제한512 MB

요약
1번 도시에서 출발해 일련번호가 서로 다른 구슬 일곱 개를 모으는 최소 순간이동 비용을 구하고, 불가능하면 -1을 출력합니다.
난이도

어려움10점 중 8점

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

문제

옛날 X 행성에는 용구슬에 관한 전설이 있었다. 용구슬을 일곱 개 모으면 용신이 나타나 소원을 들어준다는 이야기다.

그러나 각 구슬의 위치를 알려 주는 용구슬 레이더가 발견된 뒤로 구슬을 모으기가 너무 쉬워졌다. 용신은 시시한 소원에 시달리다 못해 구슬 모으기를 어렵게 만들기로 했다. 이제 구슬은 일곱 개가 아니라 아주 많이 만들어졌고, 각 구슬에는 일련번호가 붙어 있다. 같은 번호의 구슬이 여러 개 있을 수도 있다. 용신을 소환하려면 일련번호가 모두 다른 구슬 일곱 개를 모아야 한다. 같은 번호의 구슬은 중복으로 치지 않는다.

당신은 벼룩시장에서 용구슬 레이더를 샀다. 이 레이더는 각 구슬이 있는 도시와 그 일련번호를 알려 준다. 그래도 용신을 소환하는 가장 싼 방법을 찾을 수 있겠는가?

X 행성에는 1번부터 n번까지 n개의 도시가 있다. 당신은 지금 1번 도시에 있다. 도시 사이를 이동하려면 m개의 양방향 순간이동 노선 중 아무거나 골라 원하는 만큼 쓸 수 있다. i번째 노선은 도시 a_i와 b_i를 잇고, 한 번 쓸 때마다 t_i 코인이 든다. 구슬을 주우려면 그 구슬이 있는 도시를 방문하기만 하면 된다. 같은 도시에 구슬이 여러 개 있을 수 있으며, 그 도시를 방문하면 구슬을 한꺼번에 모두 줍는다.

입력

첫 줄에 세 정수 n, m, k가 주어진다 (1 ≤ n, k ≤ 1 000, 1 ≤ m ≤ 10 000). 각각 도시의 수, 순간이동 노선의 수, 구슬의 수다.

이어서 m개의 줄에 세 정수 a_i, b_i, t_i가 주어진다 (1 ≤ a_i, b_i ≤ n, 0 ≤ t_i ≤ 10 000). 도시 a_i와 b_i를 잇는 노선이며, 한 번 쓸 때마다 t_i 코인이 든다는 뜻이다.

이어서 k개의 줄에 두 정수 c_i, d_i가 주어진다 (1 ≤ c_i, d_i ≤ n). i번째 구슬은 도시 c_i에 있고 일련번호는 d_i이다. 같은 도시에 구슬이 여러 개 있을 수 있고, 같은 일련번호의 구슬이 여러 개 있을 수 있으며, 같은 도시에 같은 일련번호의 구슬이 여러 개 있을 수도 있다.

출력

일련번호가 모두 다른 구슬 일곱 개를 모으는 데 드는 최소 코인 수를 출력한다. 그 작업이 불가능하면 -1을 출력한다.

예제1

  1. 예제 1

    입력
    11 10 10
    1 2 1
    2 3 1
    3 4 1
    1 5 1
    5 6 1
    6 7 1
    7 8 1
    1 9 1
    1 10 1
    1 11 1
    2 1
    3 2
    4 3
    5 1
    6 2
    7 3
    8 4
    9 5
    10 6
    11 7
    
    예상 출력
    10