Problem 1082 - Let's SPFA II
Time Limit: 1000MS Memory Limit: 65536KB Difficulty:
Total Submit: 185 Accepted: 17 Special Judge: No
Description
邮递员去送信,他初始在街道口S,要给A,B两个街道口送信,你的任务很简单,计算从S出发按任何顺序访问A,B,
使得邮递员总路程最短.邮递员所在的城市有N(N<=100000)个街道口,M(M<=200,000)个街道,街道是双向连通的.
Input
第一行,M,N,S,A,B表示,M个街道,有N个街道口,S为邮递员所在街道口,编号A,B分别表示目的地所在街道口编号.
接下来M行u,v,l,表示街道口u,v之间的距离为l.
Output
一行,输出邮递员应走的最小长度.数据保证结果在32位int型整数范围内.
Sample Input
15 10 1 9 5
1 3 812
1 4 548
2 4 881
1 2 288
8 7 1031
3 2 383
5 10 819
8 6 1196
4 8 599
2 6 724
8 1 485
4 3 990
5 7 12
3 5 125
7 9 352
Sample Output
1160
题目类型:最短路
题目分析:
①无优化的spfa TEL。记得NOCOW上介绍spfa时说一般用较稳定的Dijkstra,算是体会到这句话了。
spfa优化 还不会,以后再说。
②heap+Dijkstra ac。
代码:
①无优化spfa TEL
②heap+Dijkstra
这里注意Dijkstra其实把终点进到集合S(也就是从heap里拿出来)的时候,就可以return了。只不过下一次要手动清队列。
经测试,这样确实能快一点。