随笔分类 - 最短路
摘要:计算出是否存在某个源点发出的信息能够到达所有其他点,并且输出满足该情况下的整个路径中最长路径最小的那个源点以及那条最长的边。floyd直接计算,在通过遍历整个二维数组来确定这个最后结果。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#define INF 0x3f3f3f3f#define MAXN 105using namespace std;// 自己到自己的距离要赋值成零int N, G[MAXN][MAXN];void floyd
阅读全文
摘要:该题就是求一只青蛙从1号石头跳到2号石头的所有路径中跳跃距离最大值的最小值。仔细想想的话,将原来dijkstra的dis数组赋值为这个minmax含义,同样满足贪心规则,所以就是普通的dijkstra。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#define MAXN 205using namespace std;int N;struct Node{ int x, y;}e[MAXN];do
阅读全文
摘要:该题是做最短路专题时的题,但是可惜没有想到如何进行最短路求解。倒是觉得dfs能够得到结果,因为该题对于建立边有严格的条件,递归能够很好的解决这个约束。每次递归时将当前路径的最低等级和最高等级传递下去,然后再进行判断。这里还要注意判定环的存在。后者没有注意的话会MLE。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#define MAXN 105using namespace std;int M,
阅读全文
摘要:该题题意非常有意思,问是否能够时空穿梭。这题与前面所做的POJ1860很相似,只是这里说明两点:1.所以逇路都是双向的,洞是单向的。2.bellman算法中,需要虚拟出一个节点,让其能够通向所有的节点(或者直接将所有点的距离都赋值为相同值)。这样就只要一次bellman算法就可以了。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#define MAXN 6000using namespace std;int N, M, W, dis[505];struct edge{ int a, b,
阅读全文
摘要:该题是给定某一货币,然后再给定一些兑换的条件,问能否使得钱币总数增加,是不是非常诱人呢?对该题的一个转化就是如果在转化的过程中出现了环的话,那么我们就可以在这个环内不停的进行转化,以致钱币数量无穷大,再反过来兑换就可以得到原始的币种了,而且一定会增加。利用bellman算法能过得到是否存在环,由于最长的环的路径长度是N-1(N各节点)所以我们只要对所有的边进行N-1次松弛,然后再看是否还可以继续松弛来判断是否有环的形成。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#define MAXN
阅读全文
摘要:World ExhibitionTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 568Accepted Submission(s): 264Problem DescriptionNowadays, many people want to go to Shanghai to visit the World Exhibition. So there are always a lot of people who are standing along
阅读全文
摘要:Burn the Linked CampTime Limit: 1 Second Memory Limit: 32768 KBIt is well known that, in the period of The Three Empires, Liu Bei, the emperor of the Shu Empire, was defeated by Lu Xun, a general of the Wu Empire. The defeat was due to Liu Bei's wrong decision that he divided his large troops in
阅读全文
摘要:作为最短路的其他几种解法,是很有必要掌握的,已知的Dijkstra只能够解决不存在负权边的图形(其灵魂是在确定点的时候同时预言了其后面一定是大于零的边),而 Floyed 算法的时间复杂度决定了其使用的范围。所以在遇到负权边的时候就要用到Bellman-Ford或者是SPFA了,可以说其是对于 Dijkstra 算法的一个简化,没有了寻找最小路径长度点然后加入集合的过程。Bellman每次都暴力搜索所有顶点,直到没有点再被更新为止,SPFA遇到更新的点就加入队列,直到队列为空为止,当然也可以使用栈。 这是写的两个简单的程序:// Bellman-Ford#include <cstdio&
阅读全文
摘要:HDU TodayTime Limit: 15000/5000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3581Accepted Submission(s): 855Problem Description经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。这样住了一段时间,徐总对当地的交通还是不太
阅读全文
摘要:HDU TodayTime Limit: 15000/5000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3254Accepted Submission(s): 749Problem Description经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。这样住了一段时间,徐总对当地的交通还是不太
阅读全文