2015 Canadian Computing Competition, Stage 1

Problem S4: Convex Hull

You are travelling on a ship in an archipelago. The ship has a convex hull which is K centimetres thick. The archipelago has N islands, numbered from 1 to N. There are M sea routes amongst them, where the i-th route runs directly between two different islands ai and bi (1 ≤ ai, biN), takes ti minutes to travel along in either direction, and has rocks that wear down the ship's hull by hi centimetres. There may be multiple routes running between a pair of islands.

You would like to travel from island A to a different island B (1 ≤ A, BN) along a sequence of sea routes, such that your ship's hull remains intact – in other words, such that the sum of the routes' hi values is strictly less than K.

Additionally, you are in a hurry, so you would like to minimize the amount of time necessary to reach island B from island A. It may not be possible to reach island B from island A, however either due to insufficient sea routes or the having the ship's hull wear out.

Input

The first line of input contains three integers K, N and M (1 ≤ K ≤ 200; 2 ≤ N ≤ 2000; 1 ≤ M ≤ 10000), each separated by one space.

The next M lines each contain 4 integers ai bi ti hi (1 ≤ ai, biN; 1 ≤ ti ≤ 105; 0 ≤ hi ≤ 200), each separated by one space. The i-th line in this set of M lines describes the i-th sea route (which runs from island ai to island bi, takes ti minutes and wears down the ship's hull by hi centimetres). Notice that aibi (that is, the ends of a sea route are distinct islands).

The last line of input contains two integers A and B (1 ≤ A, BN; AB), the islands between which we want to travel.

For 20% of marks for this question, K = 1 and N ≤ 200. For another 20% of the marks for this problem, K = 1 and N ≤ 2000.

Output

Output a single integer: the integer representing the minimal time required to travel from A to B without wearing out the ship's hull, or -1 to indicate that there is no way to travel from A to B without wearing out the ship's hull.

Sample Input 1

10 4 7
1 2 4 4
1 3 7 2
3 1 8 1
3 2 2 2
4 2 1 6
3 4 1 1
1 4 6 12
1 4

Sample Output 1

7

Explanation of Sample 1

The path of length 1 from 1 to 4 would wear out the hull of the ship. The three paths of length 2 ([1, 2, 4] and [1, 3, 4] two different ways) take at least 8 minutes. The path [1, 2, 3, 4] takes 7 minutes and only wears down the hull by 7 centimetres, whereas the path [1, 3, 2, 4] takes 13 minutes and wears down the hull by 5 centimetres.

Sample Input 2

3 3 3
1 2 5 1
3 2 8 2
1 3 1 3
1 3

Sample Output 2

-1

Explanation of Sample 2

The direct path [1, 3] wears down the hull to 0, as does the path [1, 2, 3].

All Submissions
Best Solutions


Point Value: 15 (partial)
Time Limit: 2.00s
Memory Limit: 256M
Added: Feb 21, 2015
Author: SourSpinach

Languages Allowed:
C++03, PAS, C, HASK, ASM, RUBY, PYTH2, JAVA, PHP, SCM, CAML, PERL, C#, C++11, PYTH3

Comments (Search)

Any hint as to why I got the error?
Thanks

The judge currently uses Python 2.6.8, so some of the syntax you're using is not allowed. (Ex. no {} shorthand for sets.)

Thanks :D

This breaks some top submissions

3 3 4
1 2 3 0
1 2 2 1
1 2 1 2
2 3 1 1
1 3

Correct output:
3

Can confirm, I got past the testcases during CCC even though I only tracked the shortest path and the least damaging path.

According to the explanation of Sample 1, [1, 2, 3, 4] is a valid path. This would mean that the path running from 3 to 2 with a time of 2 and wear of 2, can run from 2 to 3 as well.

The problem text states that " ... i-th sea route (which runs from island ai to island bi ... ", implying that the graph that represents this is directed, rather than undirected, as according to the explanation.

Is the graph directed or not?

Its undirected. In the problem statement it says takes ti minutes to travel along in either direction