![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最短路
菜菜魁
fighting!
展开
-
链式前向星版spfa最短路
spfa与dijkstra和Bellman-Frod一样都可以用来做最短路径问题,但是dijkstra没法判断负环,而Bellman-Frod虽然能检测负环但是效率太低。所以这个时候我们不得不借助于spfa。spfa为什么能操作负环呢?其实dijkstra和spfa的工作原理差不多,dijkstra是一个优先队列,只选取当前最小的,没考虑到后面负权值对后面的影响;而spfa是一个普通的队列,他只会...原创 2018-07-24 09:42:00 · 344 阅读 · 0 评论 -
POJ - 2253 Frogger(最小化最大边)
从第一个点到第二个点,在所有的路径中,选择一条路径,使得这条路径的最大边比其他路径的最大边小。是小数,记得使用double,记得数组大小,记得路径是双向的,不要犯zz错误(我是zz)。判断条件:d[v] > max(es[i].w, d[u]);关键式:d[v] = max(es[i].w, d[u]);#include <iostream>#include &l...原创 2018-07-25 15:50:53 · 153 阅读 · 0 评论 -
POJ - 1797 Heavy Transportation(最大化最小边)
最大化最小值是指从一个结点到另一个结点,所能走的所有路径中,选择一条路径的最小边比其他的路径最小边都大。还是在最短路的基础上随便改改就行(相信我,改的太随便就会wa,亲身经历)。判断条件:d[v] < min(es[i].w, d[u]);关键式:d[v] = min(es[i].w, d[u]);#include <iostream>#include <a...原创 2018-07-25 16:01:33 · 217 阅读 · 0 评论 -
POJ - 1860 Currency Exchange(求负环)
一个人在一个银行存得有钱,不同的银行有不同的汇率和手续费,他把这些钱转到别的银行,操作是(v - 手续费) * 汇率。问能不能转回来时钱上涨。这无非就是求经过所有路径,看是否存在一条不断上涨的路径,类似于负环,只不过判断条件变了。判断条件:d[v] < (d[u] - es[i].w2) * es[i].w1;#include <iostream>#include &...原创 2018-07-25 16:37:03 · 156 阅读 · 0 评论 -
POJ - 3259 Wormholes(求负环)
讲的是有n个农场,m条路,w个虫洞,正常的路径使人从a到b,花费t时间,虫洞可以使人从a到b,且时间回到t之前。问有个人出发到返回能不能看到以前的自己,也就是判断是否存在负环。代码分两种,一种遍历所有的点,如果这个点连接虫洞,那么以这个点为源点进行spfa判负环,把所有的点遍历一遍即可得出答案;还有一种比较巧妙,建立一个超级源点连接所有的带父权值的边的一个点,这样从源点出发,就可以判断所有...原创 2018-07-25 16:46:54 · 177 阅读 · 0 评论 -
POJ - 3660 Cow Contest (floyd求传递闭包)
给你n头牛和m种关系,每种关系可得a>b,问有多少头牛可以确定关系。其实就是一个简单的floyd,a>b, b>c, 则a > c;代码如下:#include<iostream>#include<cstring>#include<cmath>#include<algorithm>using namespace ...原创 2018-07-26 16:51:31 · 135 阅读 · 0 评论 -
POJ - 3159 Candies(差分约束)
差分约束是把不等关系换成图,求一个点减一个点的最大(最小)值;对于公式a - b <= c;我们的问题是求一个点减一个点的最大值,作为边的话,b->a的权值为c,求一遍最短路。对于公式a - b >= c;我们的问题是求一个点减一个点的最小值,作为边的话,b->a的权值为c,求一遍最长路。具体问题具体分析,把数字转化成点,不等关系转换成边就可以求解问题。对于...原创 2018-07-26 17:33:18 · 141 阅读 · 0 评论