
最短路
2
hesorchen
这个作者很懒,什么都没留下…
展开
-
POJ1556计算几何、最短路
写一道POJ的题就要吐槽一次编译题目The Doors解题思路对于所有点对,判断能不能建边。如果有某个墙挡住了这条边,那么不能建边。即判断两线段是否相交,不能算端点。代码#include <map>#include <queue>#include <cmath>#include <vector>#include <cstring>#include <iostream>#include <algori.原创 2021-10-03 20:17:23 · 95 阅读 · 0 评论 -
uva10269_SPFA思想+DP转移
题目题目大意:有n个村庄和m个城堡,编号从1到n+m,给出一个有权图,没有自环和重边。马里奥走一个单位距离需要一个单位时间。起点为城堡n+m,终点为乡村1。马里奥可以瞬移K次,每次瞬移不超过距离L,且起点和终点必须为村庄或城堡、到达一个城堡时必须结束当前瞬移。求到达村庄1的最小花费时间。详见uva10269解题思路DP[i][j][k]DP[i][j][k]DP[i][j][k]表示到达城市iii,还剩jjj次瞬移机会,上次瞬移机会还剩下kkk单位距离可以使用。分类讨论,状态过多,具体看代码注释。原创 2021-04-28 15:49:23 · 177 阅读 · 0 评论 -
SPFA回炉重造
迪杰斯特拉求最短路的步骤是每次找最距离源点最近的点进行更新。SPFA求最短路的步骤是用被更新过的点来做下一次更新。当一个点被松弛之后,判断该点是不是已经在队列中,不在的话压入队列。需要注意的是,虽然说SPFA是Bellman-Ford算法的优化,但是准确的说是假优化,事实上,所有Bellman-Ford算法的优化都会被精心构造的图卡回Bellman-Ford的复杂度。然而,Bellman-Ford及其优化的算法(包括SPFA)可以用来判断负环。(感觉这是唯一的剩余价值了)最短路例题 POJ2387SP原创 2020-08-16 20:37:23 · 2973 阅读 · 1 评论 -
最短路迪杰斯特拉回炉重造
发现很多都忘了,重新看看。找了个简单的最短路板子题测试代码:POJ 2387普通版迪杰斯特拉迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。显然是O(n2)O(n^2)O(n2)的时间复杂度。代码:ll mp[1010][1010];ll原创 2020-08-15 20:48:36 · 2746 阅读 · 0 评论 -
SPFA判负环
SPFA和Dijkstra都是解决最短路问题的算法,都有各自的特点:SPFA:1.可以判断是否存在负环2.按层级松弛3.有些数据可以卡掉SPFADijkstra:1.效率稳定2.不可以解决负边、负环的图一般处理无负边的最短路问题时,使用Dijkstra。在判断是否存在负环的时候使用SPFA。这里主要讲如何使用SPFA判断正负环。原理1.一个n个点的连通图中,经过n-1条边肯定可...原创 2020-05-07 08:14:04 · 6006 阅读 · 0 评论 -
POJ2253最短路
給出n个点的坐标,问点1到点2的所有路径中,两点最大距离的最小值是多少。其实这种最小化最大值的题,用二分+dj应该没问题,但是其实还有更简单的方法,只需要改变松弛操作即可。最短路经典松弛操作:if (dis[v] > dis[u] + w) dis[v] = dis[u] + w;我们从本质出发,为什么这样更新呢?因为我们求最短路时最后想要的是最小的总dis。回到这题,我们最...原创 2020-05-06 15:49:21 · 5401 阅读 · 1 评论 -
几种ACM常见的存图方式
几种ACM常见的存图方式:1.邻接矩阵:我之前一直在用的就是邻接矩阵,非常简单,不过占用空间比较多,另外遍历时间比较长,因此不推荐。2.vector实现邻接表:struct node{ int end, w;} temp;vector<node> start[10010];int main(){ int u, v, w; while (cin ...原创 2020-05-04 07:40:06 · 5449 阅读 · 0 评论 -
51nod树的直径 图论,搜索
题目链接:传送门选择任意一个点跑到最远的点A,再以这个最远的点A为起点跑到最远的点B,AB之间的节点数就是树的直径。原理:第一遍搜索肯定会跑到一个叶节点,从任意一个叶节点跑到最远的点,这个距离就是直径。BFS和DFS都可以实现。BFS代码:struct node{ ll v, w, next;} edge[200010];ll ct = 1;ll head[200010]...原创 2020-05-04 07:38:44 · 5198 阅读 · 0 评论