가장 긴 여행 경로

도시가 최대 18개인 가중 방향 그래프에서 0번 도시에서 n-1번 도시로 가는 단순 경로 중 총 길이가 가장 긴 경로를 구한다.

보통6동적 계획법비트 연산그래프DFS면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

한 지점에서 다른 지점으로 가는 가장 짧은 경로를 찾는 알고리즘은 잘 알려져 있다. 자동차와 휴대전화에 달린 GPS 장치는 목적지까지 가는 가장 빠른 길을 알려 준다. 그런데 휴가를 떠난 Troy는 느리게 여행하고 싶어 한다. 가는 길에 새롭고 흥미로운 곳을 많이 구경하려고, 목적지까지 가는 가장 긴 경로를 택하려 한다.

경로는 서로 다른 도시를 나열한 수열 c1,c2,,ckc_1, c_2, \dots, c_k 이고, 모든 1i<k1 \le i < k 에 대해 cic_i 에서 ci+1c_{i+1} 로 가는 도로가 있어야 한다. Troy는 같은 도시를 두 번 방문하지 않는다.

가장 긴 경로의 길이를 구하라.

입력

첫째 줄에 도시의 수 nn과 도시를 잇는 도로의 수 mm이 주어진다 (2n182 \le n \le 18, 1mn2n1 \le m \le n^2 - n). 어떤 도시에서 다른 어떤 도시로 가는 도로는 많아야 하나다. 도시에는 00부터 n1n-1까지 번호가 붙어 있고, 00은 Troy가 출발하는 도시, n1n-1은 목적지다.

다음 mm개의 줄에 각각 세 정수 ss, dd, ll이 주어진다. 도시 ss에서 도시 dd로 가는 길이 ll km의 도로가 있다는 뜻이다 (0sn10 \le s \le n-1, 0dn10 \le d \le n-1, sds \ne d, 1l100001 \le l \le 10000). 모든 도로는 일방통행이라서 ss에서 dd 방향으로만 지날 수 있고, 반대 방향으로는 지날 수 없다.

도시 00에서 도시 n1n-1로 가는 경로는 항상 하나 이상 있다.

출력

도시 00에서 출발해 도시 n1n-1에서 끝나고 같은 도시를 두 번 방문하지 않는 가장 긴 경로의 길이를 정수 하나로 출력한다. 경로의 길이는 지나간 도로의 길이를 모두 더한 값이다.