随笔分类 -  图论:最短路

摘要:给定一张无向图 求S->T经过K条边的最短路是多少 对于形如 A(i,j)=opt(A(i,k) opt B(k,j)的形式 可以考虑用矩阵乘法来解决 #include <iostream> #include <cstdio> #include <cstring> #include <alg 阅读全文
posted @ 2022-01-09 18:13 __iostream 阅读(23) 评论(0) 推荐(0) 编辑
摘要:求无向图的最小环 显然考虑枚举环上的点 多源最短路 为了避免三点共线的情况 因此要绕开中间的点,这正好符合floyd算法的思想 不经过k 不包括端点 最外层循环每扩大1 相当于允许多经过一个点 为什么只能枚举相邻的点呢? 因为我们必须保证最大的点在中间位置 假如说三点共线的话 最大点在边上 这个距离 阅读全文
posted @ 2022-01-08 22:10 __iostream 阅读(35) 评论(0) 推荐(0) 编辑
摘要:给定n个不等式 判断是否有逻辑错误 floyd传递闭包问题 #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int N=1010; int rea 阅读全文
posted @ 2022-01-08 19:55 __iostream 阅读(25) 评论(0) 推荐(0) 编辑
摘要:给定一个图 求单源最短路 这个图双向边一定是非负的 而且单向边一定不在环中 题目数据特殊构造 spfa过不了 看到图的性质 很容易想到用拓扑排序来求 但是图中只有双向边 而双向边是非负的 可以用dij来求 因此可以考虑双向边缩点之后拓扑排序 策略: 混合图缩点 在dij的时候可以顺便处理拓扑关系 / 阅读全文
posted @ 2022-01-08 15:22 __iostream 阅读(26) 评论(0) 推荐(0) 编辑
摘要:求1-n上所有路径的点权最大值和最小值的差 方法一: spfa 很容易想到 从1开始跑一边和反图上n开始跑一边求交集就是正确的路径 但是这里还有一点是不能够返回 也就是对最大值和最小值出现有先后要求 这个时候把普通的bfs换成spfa就能够突出 "到"这一点 这里为什么不能用dij? 当前最小值还可 阅读全文
posted @ 2022-01-01 19:40 __iostream 阅读(30) 评论(0) 推荐(0) 编辑
摘要:1~n的路径,第K+1大的边权尽可能小 显然二分答案,那么问题的关键变成了在最短路上能否有不超过k个大于val的边 换句话说超过val的值上是否超过k个 对于这种统计个数的问题,可以考虑用01最短路来解决 int dij() { q.pb(1); d[1]=0; while(!q.empty()) 阅读全文
posted @ 2022-01-01 18:48 __iostream 阅读(41) 评论(0) 推荐(0) 编辑
摘要:第一种: dij算法 基于贪心思想 dij算法的逻辑是:最短的距离不可能再被其他点更新 因此可以拿这个点来更新其他点 vis[x]表示这个点是否被拓展过 每个点只会被拓展一次 第二种: spfa算法 基于bfs思想 逻辑是:如果所有的点都满足d[y]<=d[x]+z 那么最短路就成立了 所以不断 阅读全文
posted @ 2022-01-01 18:47 __iostream 阅读(73) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示