随笔分类 -  图论——最短路

摘要:题意:n种钱,m种汇率转换,若ab汇率p,手续费q,则b=(a-q)*p,你有第s种钱v数量,问你能不能通过转化让你的s种钱变多? 思路:因为过程中可能有负权值,用spfa。求是否有正权回路,dis[s]是否增加。把dis初始化为0,然后转化,如果能增大就更新。每次都判断一下dis[s]。 参考:最 阅读全文
posted @ 2018-08-01 11:19 KirinSB 阅读(175) 评论(0) 推荐(0)
摘要:题意:给你所有道路的载重,找出从1走到n的所有路径中载重最大的,即路径最小值的最大值。 思路:和之前的POJ3268很像。我们用Dijkstra,在每次查找时,我们把最大的先拿出来,因为最大的不影响最小值,然后我们更新的时候,如果当前承重比我们新开辟的路的承重的能力差,那就替换成新的。 注意题目所给 阅读全文
posted @ 2018-07-31 20:14 KirinSB 阅读(153) 评论(0) 推荐(0)
摘要:题意:有n个地点,有m条路,问从所有点走到指定点x再走回去的最短路中的最长路径 思路:用Floyd超时的,这里用的Dijkstra。 Dijkstra感觉和Prim和Kruskal的思路很像啊。我们把所有点分为两个集合:S(和源点在同一集合),T(其余点),用dis数组表示每个点到S的最短距离,vi 阅读全文
posted @ 2018-07-31 19:12 KirinSB 阅读(152) 评论(0) 推荐(0)
摘要:题意:想给你公青蛙位置,再给你母青蛙位置,然后给你剩余位置,问你怎么走,公青蛙全力跳的的最远距离最小。 思路:这里不是求最短路径,而是要你找一条路,青蛙走这条路时,对他跳远要求最低。这个思想还是挺好迁移的,原来我们用mp[i][j]表示i到j最短路径,那么我们现在用它表示i到j最大步伐,然后每次比较 阅读全文
posted @ 2018-07-31 15:40 KirinSB 阅读(199) 评论(0) 推荐(0)
摘要:思路:Floyd模板题,注意一下Floyd核心的三个循环,顺序不要变,我们不能把k放在最内层。因为Floyd是通过不断遍历查找是否有更小的两个路径拼起来能比当前小,如果k在最内层,那么我们就会提前算好ij的最小路径,但是此时还有很多其他路径没有合并,无法保证这是最小的。 Floyd可以用来做多源最短 阅读全文
posted @ 2018-07-31 11:20 KirinSB 阅读(123) 评论(0) 推荐(0)