2015 Canadian Computing Olympiad
Day 1, Problem 2 - Artskjid
There are many well-known algorithms for finding the shortest route from one location to another. People have GPS devices in their cars and in their phones to show them the fastest way to get where they want to go. While on vacation, however, Troy likes to travel slowly. He would like to take the longest route to his destination so that he can visit many new and interesting places along the way.
As such, a valid route consists of a sequence of distinct cities c1, c2, …, ck, such that there is a road from ci to ci+1 for each 1 ≤ i < k.
He does not want to visit any city more than once. Can you help him find the longest route?
The first line of input contains two integers n, m, the total number of cities and the number of roads connecting the cities (2 ≤ n ≤ 18; 1 ≤ m ≤ n2 − n). There is at most one road from any given city to any other given city. Cities are numbered from 0 to n − 1, which 0 being Troy's starting city, and n − 1 being his destination.
The next m lines of input each contain three integers s, d, l. Each triple indicates that there is a one way road from city s to city d of length l km (0 ≤ s ≤ n − 1; 0 ≤ d ≤ n − 1; s ≠ d; 1 ≤ l ≤ 10000). Each road is one-way: it can only be taken from s to d, not vice versa. There is always at least one route from city 0 to city n − 1.
For at least 30% of the marks for this problem, n ≤ 8.
Output a single integer, the length of the longest route that starts in city 0, ends in city n − 1, and does not visit any city more than once. The length is the sum of the lengths of the roads taken along the route.
3 3 0 2 5 0 1 4 1 2 3
The shortest route would be to take the road directly from 0 to 2, of length 5 km. The route going from 0 to 1 to 2 is 4 + 3 = 7 km, which is longer.
Point Value: 15 (partial)
Time Limit: 2.00s
Memory Limit: 256M
Added: Jun 05, 2015
Author: Ondrej Lhotak
C++03, PAS, C, HASK, ASM, RUBY, PYTH2, JAVA, PHP, SCM, CAML, PERL, C#, C++11, PYTH3