만드는 중입니다

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

약간 모자라지만 착한 친구야

면접 대비

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

요약
대학에서 출발해 각 동네를 한 번씩 방문하고 다시 대학으로 돌아오는 최단 시간을 구합니다. 사진 순서 제약을 지켜야 합니다.
난이도

보통10점 중 5점

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

사연

진주 나들이를 온 보선이는 경상국립대 정문 쪽 연못 산책길에서 울고 있는 동기 원우를 만났다. 보선이가 다가가 이유를 묻자, 원우는 울면서 교수님의 심부름을 설명했다. 경상국립대에서 출발해 대학 주변의 모든 동네에 가서 하늘 사진을 찍고, 다시 경상국립대로 돌아오라는 것이었다. 원우는 거절하지 못했지만 심부름을 어떻게 끝내야 할지 모르겠다고 했다. 약간 모자라지만 착한 원우를 위해 보선이가 대신 심부름을 맡기로 했다.

문제

경상국립대 주변에 있는 동네는 총 NN개이며, 1번부터 NN번까지 번호가 붙어 있다. 보선이는 편의상 경상국립대를 N+1N+1번 지점으로 본다. 각 동네는 한 번씩만 방문할 수 있다. 하늘 사진을 찍으러 출발하면 필요한 사진을 모두 찍기 전까지는 경상국립대로 돌아올 수 없다. 경상국립대와 동네 NN개 가운데 서로 다른 두 지점을 잇는 단방향 도로가 MM개 있다. 시작 지점과 도착 지점이 같은 도로가 두 개 이상 존재할 수 있다.

교수님은 당부를 하나 더 하셨다. 임의의 두 하늘 사진은 찍은 시각에 차이가 있어야 하고, 어떤 동네의 하늘 사진은 그 동네에 정해진 다른 동네의 하늘 사진보다 늦게 찍어야 한다. 보선이는 심부름을 최대한 빨리 마치려고 한다. 하늘 사진을 찍는 데 걸리는 시간은 무시한다. 심부름을 마치는 데 걸리는 시간의 최솟값을 구하라.

입력

첫 줄에 동네의 개수 NN과 단방향 도로의 개수 MM이 공백으로 구분되어 주어진다. (1≤N≤14;1≤M≤200)(1 \le N \le 14; 1 \le M \le 200)

둘째 줄에는 P1,…,PNP_1, \dots, P_N이 공백으로 구분되어 주어진다. 이는 ii번 동네의 하늘 사진을 PiP_i번 동네의 하늘 사진보다 늦게 찍어야 한다는 뜻이다. i=Pii = P_i이면 ii번 동네에서 사진을 찍는 시점은 상관없다. (1≤Pi≤N)(1 \le P_i \le N)

셋째 줄부터 MM개의 줄에 걸쳐 각 단방향 도로의 정보 uiu_i, viv_i, wiw_i가 공백으로 구분되어 주어진다. ii번째 도로는 시작 지점이 uiu_i, 끝 지점이 viv_i이며, 도로를 지나는 데 wiw_i의 시간이 걸린다. 11번부터 NN번까지는 동네이고, N+1N+1번 지점은 경상국립대이다. (1≤ui,vi≤N+1;ui≠vi;1≤wi≤100)(1 \le u_i, v_i \le N+1; u_i \ne v_i; 1 \le w_i \le 100)

입력의 모든 수는 정수이다.

출력

첫 줄에 심부름을 마치는 데 걸리는 시간의 최솟값을 출력한다. 심부름을 마칠 수 없으면 -1을 출력한다.

예제2

  1. 예제 1

    입력
    2 6
    2 2
    3 1 1
    1 2 1
    2 3 1
    3 2 2
    2 1 2
    1 3 2
    
    예상 출력
    6
    
  2. 예제 2

    입력
    2 6
    2 1
    3 1 1
    1 2 1
    2 3 1
    3 2 2
    2 1 2
    1 3 2
    
    예상 출력
    -1