随笔分类 -  最短路

摘要:最短路径2 ECNU-1818 本题需要注意的一个问题就是重边的问题,虽然这题的数据量很小,但是不能使用邻接矩阵来存储,也不能将重边记为最小边来计算。 这里求最短路径的条数有很多方法,我第一个想到的是使用dfs来遍历,但是会超时。 有一个简单的记录最短路径条数的方法是使用一个num数组 /** * 阅读全文
posted @ 2020-10-07 12:13 Garrett_Wale 阅读(515) 评论(0) 推荐(0) 编辑
摘要:Public Bike Management PAT-1018 使用一个vector来存储所有最短路的前驱结点,再通过使用dfs和一个额外的vector记录每一条路径 #include<iostream> #include<cstdio> #include<algorithm> #include<c 阅读全文
posted @ 2020-09-23 10:17 Garrett_Wale 阅读(105) 评论(0) 推荐(0) 编辑
摘要:Wormholes "POJ 3259" 这题是最短路问题中判断是否存在负圈的模板题。 判断负圈的一个关键就是理解:如果在图中不存在从s可达的负圈,最短路径不会经过一个顶点两次。while循环最多执行v 1次。 这题还需要注意的是输入的w条边的权值是负值,因为这是虫洞边。 阅读全文
posted @ 2020-05-10 17:26 Garrett_Wale 阅读(205) 评论(0) 推荐(0) 编辑
摘要:Currency Exchange "POJ 1860" 这题其实是最短路问题的变形,但是这里不用求解最短路,而是求解路径中是否存在正圈。如果存在正圈则说明兑换后的货币可以一直增加,否则不能实现通过货币转化来增加财富。 这和经典的使用Bellman Ford判断是否存在负权也有不同的地方,这里需要在 阅读全文
posted @ 2020-05-10 16:59 Garrett_Wale 阅读(401) 评论(0) 推荐(0) 编辑
摘要:Silver Cow Party "POJ 3268" 这题也是最短路的模板题,只不过需要进行两次求解最短路,因为涉及到来回的最短路之和。 该题的求解关键是:求解B A的最短路时,可以看做A是起点,这就和求解A B的最短路很类似了,只不过需要将单向路的距离调换一下即可。 JAVA: 阅读全文
posted @ 2020-05-09 21:50 Garrett_Wale 阅读(473) 评论(0) 推荐(0) 编辑
摘要:Heavy Transportation "POJ 1797" 这题是最短路题型的变形,该题不是求起点到终点的最短路,而是求路径中的最小边的最大值。 这题的求解思路是:将原来dijkstra中的松弛方程改一下,改成求最小边的最大值的松弛方程:d[j]=max(d[j],min(d[i],w[i][j 阅读全文
posted @ 2020-05-09 21:23 Garrett_Wale 阅读(516) 评论(0) 推荐(0) 编辑
摘要:Til the Cows Come Home "POJ 2387" 这题是最简单的最短路求解题,主要就是使用dijkstra算法,时间复杂度是O(n2). 需要注意的是,一定要看清楚题目的输入要求,是先输入边,再输入顶点,一开始我没看清,wrong answer了一次。 阅读全文
posted @ 2020-05-09 19:50 Garrett_Wale 阅读(200) 评论(0) 推荐(0) 编辑
摘要:地铁修建 "201703 4" 这题就是最短路的一种变形,不是求两点之间的最短路,而是求所有路径中的最长边的最小值。 这里还是使用d数组,但是定义不同了,这里的d[i]就是表示从起点到i的路径中最长边中的最小值。 在松弛的时候,注意是d[i] max(d[u],cost),max保证了是所有路径中的 阅读全文
posted @ 2019-09-08 09:43 Garrett_Wale 阅读(198) 评论(0) 推荐(0) 编辑
摘要:Tram "POJ 1847" 这里其实没有必要使用SPFA算法,但是为了巩固知识,还是用了。也可以使用dijikstra算法。 阅读全文
posted @ 2019-09-06 10:58 Garrett_Wale 阅读(146) 评论(0) 推荐(0) 编辑
摘要:frogger "POJ 2253" 这题的代码特别像prim求解最小生成树的代码,其实两者本来也很像。 这里的d数组不再维护的起点到该点的最短距离了,而是路径中的最长距离。 include include include include include include include using 阅读全文
posted @ 2019-09-05 19:55 Garrett_Wale 阅读(297) 评论(0) 推荐(0) 编辑
摘要:昂贵的婚礼 "POJ 1062" 这道题目一开始看的时候难以理解,但是仔细想,还是可以和最短路联系的,我觉得类似于硬币交换等问题。 以下需要注意几个点,第一就是因为题目规定如何和超出了等级限制的人交易,则拒绝交易。也就是说符合交易条件的人一定和第一个人(国王)之间的等级差距小于m。 这里通过枚举等级 阅读全文
posted @ 2019-09-05 19:03 Garrett_Wale 阅读(630) 评论(0) 推荐(0) 编辑
摘要:Marriage Match IV "HDOJ 3416" 这题的题意就是要找两点之间最短路的路径个数,而且边不能重复。 最大流和最短路的结合。首先正向和反向建图,再跑两遍dijikstra。到这里就求出来起点到某一点的最短路以及某一点到终点的最短路。 还有一个关键的公式就是如何判断一条边是否在最短 阅读全文
posted @ 2019-09-05 16:51 Garrett_Wale 阅读(193) 评论(0) 推荐(0) 编辑
摘要:The Shortest Path in Nya Graph "HDOJ 4725" 这题是关于最短路的问题,但是和常规的最短路有点不同的就是这里多了层次这一结构。 为了解决这一问题可以把每一层抽象或者划分为两个点:入点和出点。 对于每个点,将所在层的入点和该点相连,再将该点和所在层的出点相连,权值 阅读全文
posted @ 2019-09-05 12:05 Garrett_Wale 阅读(181) 评论(0) 推荐(0) 编辑
摘要:Extended Traffic "LightOJ 1074" 这题因为涉及到减法和三次方,所以可能会出现负圈。 这里使用的算法叫做SPFA算法,这个可以用来判负圈和求解最短路。Bellman Ford算法和SPFA算法很相似。 这里要注意的是cnt出现次数应该要在哪里加。 include incl 阅读全文
posted @ 2019-09-04 19:59 Garrett_Wale 阅读(175) 评论(0) 推荐(0) 编辑
摘要:通信网络 "201709 4" 一看到题目分析了题意之后,我就想到用floyd算法来求解每一对顶点的最短路。如果一个点和任意一个点都有最短路(不为INF),那么这就是符合的一个答案。可是因为题目超时,只能拿60分。 另一种解法就是使用dfs把图简单的遍历一遍就可以了。这里要用到两遍dfs反着也要建图 阅读全文
posted @ 2019-09-03 20:26 Garrett_Wale 阅读(362) 评论(0) 推荐(0) 编辑
摘要:Subway "POJ 2502" 这里除了直接相连的地铁站,其他图上所有的点都要连线,这里是走路的速度。 记住最后的结果需要四舍五入,否则出错。 include include include include include include include include include usin 阅读全文
posted @ 2019-08-24 16:58 Garrett_Wale 阅读(158) 评论(0) 推荐(0) 编辑
摘要:Candies "POJ 3159" 这里是图论的一个应用,也就是差分约束。通过差分约束变换出一个图,再使用Dijikstra算法的链表优化形式而不是vector形式(否则超时)。 阅读全文
posted @ 2019-08-24 15:43 Garrett_Wale 阅读(200) 评论(0) 推荐(0) 编辑
摘要:Invitation Cards "POJ 1511" 从这道题我还是发现了很多的问题,首先就是快速输入输出,这里的ios:: 这一行必须先放在main函数第一行,也就是输入最开始的前面,否则系统疯狂报WA。 其次就是,ios的位置没有错之后又疯狂地报TLE,就是超时了,这个问题要不就是算法的复杂度 阅读全文
posted @ 2019-08-24 11:30 Garrett_Wale 阅读(198) 评论(0) 推荐(1) 编辑
摘要:Arbitrage "poj 2240" include include include include include include include using namespace std; mapma; int n; int m; float graph[32][32]; float d[32 阅读全文
posted @ 2019-08-23 19:38 Garrett_Wale 阅读(125) 评论(0) 推荐(0) 编辑
摘要:317号子任务 "201903 5" 为了过前60分,想使用dijikstra优化算法的,但是最后还是只过了35分。这里的思路只需要先将所有的行星据点进行一次dijikstra,分别存储所有点到行星的最短距离,最后使用一个优先队列存储所有的距离就可以了。 include include includ 阅读全文
posted @ 2019-08-23 11:20 Garrett_Wale 阅读(423) 评论(0) 推荐(0) 编辑

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