最短路
Rancho__
这个作者很懒,什么都没留下…
展开
-
1018 Public Bike Management (30分) (迪杰斯特拉+dfs)
思路就是dijkstra找出最短路,dfs比较每一个最短路。dijkstra可以找出每个点的前一个点, 所以dfs搜索比较的时候怎么处理携带和带走的数量就是关键,考虑到这个携带和带走和路径顺序有关,所以可以用下面的写法,看代码就可以了。最开始的时候是想用一个偏动态规划的写法做,但是因为题目的显示,既要带去的车数量最少,又要求从一个点带走的车数量最少,所以如果过动规的话,对于一个点的多个最短路,...原创 2019-12-21 17:01:55 · 137 阅读 · 1 评论 -
HDU-1217-Arbitrage(SPFA)
这题和以往的求最短路的题目略微有点不一样,以往求的都是最小的,这题求的是大的,而且还是乘法。我们求的时候初始化的时候就要进行相反的初始化了,把它们初始化为0,然后比较大的就更新。因为这题的点少边多,所以spfa会比较好,我们对于每种货币都跑一遍,如果其中任何货币的从它到它的路,即d[start]大于1,就说明可以升值。d[start]的初始值为1,用map 的时候,记得清空,不然反复使用可能...原创 2019-02-13 19:50:37 · 187 阅读 · 0 评论 -
hihoCoder-1089-Floyd
我们读入的时候,要考虑重边的问题,我们只取边的最小值就可以了。#include <cstdio>#include <cstring>const int INF = 0x3f3f3f3f;int map[105][105];int n,m;int min(int x,int y){ return x < y ? x : y;}int mai...原创 2019-02-12 12:33:11 · 108 阅读 · 0 评论 -
hihoCoder-1093-SPFA
SPFA的卓越之处就在于处理多点稀疏图,因为点太多的话,我们直接用矩阵来存图的话是存不下的。所以当我们用邻接矩阵来存图的话,我们就可以用SPFA来解决这类问题,spfa就是优化版的bellman-ford算法。当我们无法对于单源最短路进行更新的话,说明所有的从起点出发的路已经都是最优了,这时候,我们的广搜也就结束了,我们的spfa也就结束了。我们从起点开始进入,然后选择和起点相邻的点,看看...原创 2019-02-11 12:09:25 · 213 阅读 · 0 评论 -
HDU-1599-Find the mincost route
无语了,第一次因为溢出错这么多次。最大值不能设置为0x3f3f3f3f ,要不然三个它相加就溢出了,一直错。这题问的是从一个点出发,经过其它不同两点,回到起点,这个环的最小值,也就是说边ab+bc+ca的值。我们可以不断地进行松弛操作,每次调整最小的环值,我们比较的是,当前最小环值和从min(ac)+dis(ab)+dis(bc) ,这样我们就一定经过了不同的两点,从而更新了环值。默默补一...原创 2019-02-05 18:34:24 · 140 阅读 · 0 评论 -
HDU-2544-最短路(floyd)
板子题,实验一下floyd。#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int INF = 0x3f3f3f3f;int map[105][105];int n, m;int main(){ while (scanf(...原创 2019-02-05 12:04:20 · 145 阅读 · 0 评论 -
HDU-2544-最短路(Bellman-Ford)
Bellman-Ford算法是一个时间复杂度很高,但是它可以用来判断负环负环就是上面的图,那个环的整体值小于零了,所以就是负环。我们用Bellman-Ford算法进行更新,打一个表出来:k a b c s00 10 1 -2 20 1 -2 -1 20 0 -2 -1 1这时候,我们已经跑完更新的块了,然后我们运行检查的块,当我们检查到B点的时候,发现...原创 2019-01-21 16:33:22 · 136 阅读 · 0 评论 -
HDU-3790-最短路径问题
这题的话就是单源最短路的问题,不过题目中加入了两个不同的权值,一个是高优先级的路径长度,一个是低优先级的花费。我们在读入的时候,按照高优先级为先的顺序进行修改,如果某点到另一点的路径长度更短,那我们就修改它的长度和花销。如果长度相同并且花销更小,我们就可以修改它的花销。我们在Dijkstra里面进行轮询的时候也是如此,我们主要通过长度来进行修改,次要考虑花费问题。只有当长度相同但是花销更小...原创 2019-01-21 10:06:25 · 142 阅读 · 0 评论 -
HDU-1874-畅通工程续
这题应该算是最简单的最短路了,没什么好说的。#include <iostream>#include <cstring>using namespace std;const int INF = 1 << 30;int n, m, s, e, t;int d[205], w[205][205];bool vis[205];void Dijkstra(...原创 2019-01-20 17:02:25 · 73 阅读 · 0 评论 -
HDU-2112-HDU Today
这题的话,坑点挺多的,我也WA了好几次。首先,对于map,因为是多次使用,所以每次处理完一个图之后就要清空。其次,就是对于DIjkstra跑图的时候,如果这个图是连通图的话,我们每次选取最小值点是一定可以选到的,但是对于不连通的图,如果任何一个点都不与终点连通,那选取最小值点的时候就一定会选到无穷大点。所以这时候,如果不对我们之前声明的用来存最小值点标号的变量k赋初值的话,那基本上访问是越界...原创 2019-01-20 16:19:00 · 114 阅读 · 0 评论 -
HDU-2544-最短路
这题没什么要注意的,只要建模没问题,代码其实OK的。这题原点和终点是固定的,也就省了设置变量了。这题的模型是无向带权的图,我们建立双向的边就可以啦。#include <stdio.h>#include <string.h>const int INF = 1 << 30;int n, m,a,b,c;int w[110][110],d[110];b...原创 2019-01-20 09:26:51 · 101 阅读 · 0 评论 -
HDU-1548-奇怪的电梯
这题的题意就是,如果在k层,该数的序号为k,则在k层上只能去k+a[k]层或者k-a[k],这样的话,就变成了一个单向联通图,对这个Dijkstra算法就可以了。#include <cstdio>#include <string.h>const int INF=1<<30;int d[210],w[210][210];bool vis[200];in...原创 2019-01-19 18:18:26 · 134 阅读 · 0 评论