We have collected abundant information about the local roads and accommodations in a region that we will traverse. Our plan is to go from city A to city B and we would like to spend the least possible money. For each road connecting two cities u and v we know the cost ω(u,v)=ω(v,u) to travel along that road (tolls, fuel, meals during the journey, …). Every time we go from a city u to one of its neighbors v we must stop at v and spend there one night; we know the cost ω′(v) of stopping at each city v (the cost added by A and B to our route is 0, since they are our initial and final points). All costs, of vertices and of edges, are non-negative. Thus the cost of the route
P = [A, v1, …, vn, B] |
is
cost(P) = ω(A,v1) + ω(v1,v2) + … + ω(vn,B) + ω′(v1)+…+ω′(vn). |
Write a program in C++ which, given an undirected weighted graph with non-negative costs at the vertices and at the edges, and two vertices A and B, returns the cost of the cheapest route to go from A to B, or an indication that not such route exists.
Input All data in the input are non-negative integers. The input starts with two integers 2≤n≤10000 and m, 0≤m≤20n. After that, a sequence of non-negative integers ω′(0), …, ω′(n−1) of the weights ω′(u) of the n vertices of the graph. Then the input contains a sequence of the m edges in the graph as triplets of the form ⟨u,v,ω(u,v)⟩. Vertices u and v are integers in {0,…,n−1} and the weights ω(u,v) are non-negative integers. You can assume that there are no two different edges connecting the same pair of vertices nor any edge connecting a vertex to itself. Finally, there is a sequence of pairs ⟨Ai, Bi⟩, with each Ai and Bi denoting vertices of the graph (0≤Ai,Bi<n).
Output For each pair ⟨Ai, Bi⟩ in the input sequence the program writes the cost δ of the cheapest route between Ai and Bi. with the format c(Ai,Bi) = δ. If no route exists between Ai and Bi the program writes c(Ai,Bi) = +oo. The ouput for each case is ended with a newline (endl).
Input
6 8 3 6 10 15 5 2 0 1 2 1 2 7 2 3 2 0 2 1 1 3 4 2 4 8 3 4 2 3 0 5 0 4 1 4 2 4 3 1 4 1 2 5 2 2
Output
c(0,4) = 19 c(1,4) = 21 c(2,4) = 8 c(3,1) = 4 c(4,1) = 21 c(2,5) = +oo c(2,2) = 0