![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
最短路问题
文章平均质量分 50
总结了一些自己刷过的最短路问题题目
Honestbutter-
这个作者很懒,什么都没留下…
展开
-
Floyd算法原理
限定了每个点可以用的时间(在TiT_iTi之前这个点是不能使用的),下标越大的点能用的时间越晚即Ti−1<TiT_{i-1}<T_iTi−1<Ti。这就说明在TiT_iTi之前iii点是不能用来更新的。floyd()floyd()floyd()三层forforfor循环最外层的kkk表示从iii走到jjj的路径上,只经过111到kkk的所有路径。所以只有t≥Tkt≥T_kt≥Tk时能够进行更新操作。#include<iostream>#include<.原创 2022-02-09 15:46:03 · 737 阅读 · 0 评论 -
堆优化Dijkstra/hash表存结点编号
https://ac.nowcoder.com/acm/contest/27150/J结点编号数据范围达到了1e181e181e18,通过哈希表MAP<LL,int>mpMAP<LL,int>mpMAP<LL,int>mp优化。用get()get()get()函数进行转化。注意最短路长度达到longlonglong longlonglong级别,所以d[]d[]d[]数组初始化时用forforfor循环初始化为1e131e131e13#include<io原创 2022-02-09 14:25:32 · 199 阅读 · 0 评论 -
洛谷P1629 邮递员送信——堆优化Dijkstra()解决多源单终点问题
洛谷P1629 邮递员送信堆优化Dijkstra()解决多源单终点问题题意:求从1到n的最短路(单向边),再求从n到1的最短路。方法:将图按照顺序存储后,再反过来存储一遍,将多源单终点最短路问题通过将图中的边反向转化成单源多终点最短路问题。n->1的最短路问题又转化成了1->n的最短路问题(但是边)。(也就是把图正反存两边,因为不想再开一个数组,所以反过来的图直接从1+n开始存,但是如果用一个数组存储的话,记得数组要开两倍长)样例举例:从2->1的最短路径,图反转后,就相原创 2021-08-30 20:03:23 · 201 阅读 · 0 评论 -
spfa算法模版
(模版)求固定起点s到i点的最短路径题目没有说明是“非负权图”时,说明可能存在负边权,首先想到用SPFA算法。但是“当图中存在负环时”,SPFA算法不能使用。SPFA算法比堆优化版的Dijkstra算法代码要精简许多,既能解决有负边权的题目也能解决没有负边权的题目,所以求最短路优先使用SPFA算法, 如果卡掉了,换堆优化版的Dijkstra算法(y总说这种情况非常非常罕见,除非出题人特地要卡掉SPFA)1.没有卡掉SPFA算法链接????谁是起点就把谁最先放进队列中,初始化距离为0#inclu原创 2021-08-29 17:02:34 · 127 阅读 · 0 评论 -
洛谷p1119 灾后重建
洛谷p1119 灾后重建考察Floyd()算法的本质:三重循环更新从i号顶点到j号顶点只经过前k号点的最短路径长度void floyd(){ for(int k=1;k<=n;k++)//通过前k个点进行中转 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);}本题的具体分析:在flo原创 2021-08-29 15:32:48 · 130 阅读 · 0 评论