COURIER - The Courier

Byteland is a scarcely populated country, and residents of different cities seldom communicate with each other. There is no regular postal service and throughout most of the year a one-man courier establishment suffices to transport all freight. However, on Christmas Day there is somewhat more work for the courier than usual, and since he can only transport one parcel at a time on his bicycle, he finds himself riding back and forth among the cities of Byteland.

The courier needs to schedule a route which would allow him to leave his home city, perform the individual orders in arbitrary order (i.e. travel to the city of the sender and transport the parcel to the city of the recipient, carrying no more than one parcel at a time), and finally return home. All roads are bi-directional, but not all cities are connected by roads directly; some pairs of cities may be connected by more than one road. Knowing the lengths of all the roads and the errands to be performed, determine the length of the shortest possible cycling route for the courier.


The input begins with the integer t, the number of test cases. Then t test cases follow.

Each test case begins with a line containing three integers: n m b, denoting the number of cities in Byteland, the number of roads, and the number of the courier's home city, respectively (1<=n<=100,1<=b<=m<=10000). The next m lines contain three integers each, the i-th being ui vi di, which means that cities ui and vi are connected by a road of length di (1<=ui,vi<=100, 1<=di<= 10000). The following line contains integer z - the number of transport requests the courier has received (1<=z<=5). After that, z lines with the description of the orders follow. Each consists of three integers, the j-th being uj vj bj, which signifies that bj parcels should be transported (individually) from city uj to city vj. The sum of all bj does not exceed 12.


For each test case output a line with a single integer - the length of the shortest possible bicycle route for the courier.


Sample input:
5 7 2
1 2 7
1 3 5
1 5 2
2 4 10
2 5 1
3 4 3
3 5 4
1 4 2
5 3 1
5 1 1

Sample output:

hide comments
black_shroud: 2020-06-29 17:44:39

awesome question

sandeepd: 2020-01-17 19:54:40

Lovely problem!

rks14: 2019-09-12 12:52:49


nadstratosfer: 2019-05-18 04:54:27

A beautiful and hard problem, needing knowledge of several concepts to solve. 2 years ago I had no idea what a graph was and looking back now after a somewhat effortless AC, it was a long way to get here. A very satisfying journey.

uf0p2rosir: 2019-04-11 21:08:00

Isn't this problem NP-Complete?

uf0p2rosir: 2019-04-11 19:01:00

and 1<=ui,v<=n instead of <=100 ?

uf0p2rosir: 2019-04-11 18:59:21

Is that b<=n instead of b<=m ?

venture_walk: 2017-10-17 17:58:39

How do you solve it with memory as less as 3.1MB ??

adelmzian: 2017-09-18 19:40:04

any body can explain to me the test case above ?

Last edit: 2017-09-18 19:40:26
akt_1998: 2017-06-22 12:34:26


Added by:adrian
Time limit:7s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: NODEJS PERL6 VB.NET
Resource:based on a problem from the VII Polish Collegiate Team Programming Contest (AMPPZ), 2002