Roadblocks

来源:互联网 发布:java发送邮件代码 编辑:程序博客网 时间:2024/06/05 16:39

题目来源

题目大意:求1到n的权值大于最短路的次短路,在路径中允许重边。

攻略:

一看数据量,O(n^3)是肯定过不了的,O(E)应该能过。因为次短路有一定有一部分是最短路,次短路由最短路得出,由此诞生

第一种:保存从1到所有节点的最短路和次短路的权值,用DIJ做,在O(E)的时效下只能求最短路,

因为求每个节点的次短路不一定按照最短路得顺序得出,得出后面节点的最短路有可能会更新前面已经算好的次短路,第一种方法失败了。

第二种,SPFA,不管是最短还是次短,有更新就枚举每条边,没有就结束,写好代码才发现无法避免一个此短路和最短路来自

路径完全相同,有可能同一个节点更新他后续节点的最短和次短(有更新后的又一次枚举所有边),再次失败。

第三种,次短路径和最短路径至少有一条边不同,且那条边一定不在最短路径上,那我就枚举所有的非最短路径边,再求这条边

的起点到1,终点到n的最短路径,加上这条边权值就构成了所有次短路径,时间复杂度O(E),但常数较大。

 

后来和同学讨论得出,第三种不适合求次短路径(不允许重边),因为有可能从起点到1,终点到n的两条最短路径有可能会有

重边。