随笔分类 -  Ⅲ.图论__最短路问题

摘要:最开始啃这题的时候我还是个不会$lca$的人,看代码看的没有一点头绪,现在趁着寒假补了很多关于图论的知识点,回头在看这题还是有很多值得学习的地方。 Solution 1 (offline): 原题解: Sort edges by new weight. Add them progressively, 阅读全文
posted @ 2020-01-18 14:36 sparkyen 阅读(356) 评论(0) 推荐(1)
摘要:分层图最短路是指在可以进行分层图的图上解决最短路问题。分层图:可以理解为有多个平行的图。 一般模型是:在一个正常的图上可以进行 k 次决策,对于每次决策,不影响图的结构,只影响目前的状态或代价。一般将决策前的状态和决策后的状态之间连接一条权值为决策代价的边,表示付出该代价后就可以转换状态了。 一般有 阅读全文
posted @ 2019-07-29 10:59 sparkyen 阅读(816) 评论(1) 推荐(1)
摘要:>传送门< 题意:给你n个城市,m条道路,经过每一条要花费这条路的代价,现给你k个机会,使得最多k条路的代价为0,问从起点s到终点t花费的最少代价 思路:分层图最短路经典裸题 方法一 Code #include <bits/stdc++.h> using namespace std; struct 阅读全文
posted @ 2019-07-28 22:28 sparkyen 阅读(251) 评论(0) 推荐(1)
摘要:我们用DP来求解任意两点间的最短路问题 首先定义状态:d[k][i][k]表示使用顶点1~k,i,j的情况下,i到j的最短路径 (d[0][i][j]表示只使用i和j,因此d[0][i][j] = cost[i][j]) 状态转移方程:d[k][i][j] = min ( d[k-1][i][k], 阅读全文
posted @ 2019-05-23 21:08 sparkyen 阅读(312) 评论(0) 推荐(1)
摘要:根据之前最短路径算法里提到的,我们只要放松所有边直到其全部失效就可以得到最短路径 注意:图中不能有负圈。否则当负圈中某个点经过这个负圈的所有边的松弛操作后,这个点的的d[i]就会减小,此时会发现它可以通过这个负圈的松弛操作不断使它自身不断变小。对于存在负圈的图,最短路无意义 由于是有关边的算法,并且 阅读全文
posted @ 2019-05-21 21:44 sparkyen 阅读(2447) 评论(2) 推荐(1)
摘要:算法的核心思想:在尚未使用的顶点中,d[i]最小的顶点就是最短距离已经确定的顶点 解释:以图1-1为例,假设A,B,C已经被标记,则剩下的点可以认为经过A,B,C三点的松弛操作(看通过这个点作为中转站会不会使得其他点离起点更近)。 那么在被标记的顶点中,找出d[i]最小的顶点,就可以认为它就是最短距 阅读全文
posted @ 2019-05-21 20:39 sparkyen 阅读(234) 评论(0) 推荐(1)
摘要:怀着复杂的心情来写这篇博客,有关图论的算法我看的有点头疼。 主要是实现起来没有那么困难,但是不像之前的那些算法,大致看一下就知道为什么,图论要看懂原理和正确性还是有点困难的,太耗时间而且烧脑了。 完全严格弄懂这个我估计够呛,下面给出基本思路,特别感谢《算法》这本书 边的松弛 边的松弛操作,定义如下: 阅读全文
posted @ 2019-05-21 20:11 sparkyen 阅读(231) 评论(0) 推荐(1)