http://codeforces.com/problemset/problem/938/D
题意:n个城市,每个城市都要举办场演唱会,票价是a[i],此外还有m条双向有权边连接各个城市,求从每个城市出发,看一场演唱会再返回的最小花费。
样例:in: 4 2 out: 6 14 1 25
1 2 4
2 3 7
6 20 1 25
3 3 12 10 12
1 2 1
2 3 1
1 3 1
30 10 20
题解:这道题是多源最短路问题,可以用dijkstra和优先队列求解。
首先将每个城市的票价加入优先队列,队列首是最便宜的城市票价,则不用去其他城市,从本城市花费就ok。然后从该城市开始扫离它最近的其他城市,然后其他城市的花费=min(其他城市的票费,第一个城市的票费加路费)(由于是优先队列,故输出的一定是该城市的最优解)。扫完存数组输出就ok了。
AC代码:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include