最短路径
银之夏雪
这个作者很懒,什么都没留下…
展开
-
uva11090Going in Cycle!!(最短路spfa)
这道题使我彻底弄明白了spfa为什么最多是n-1个点入队,多一个点入队,就证明是有负环必然,举个栗子 比如说读边的顺序呢是这样的1——5,1——2,2——5,2——3,3——5,3——4,4——5,那么1号点先入队列,然后是5号,和2号入队列,1号出队列,5号点出队列,现在队列里只剩2号点,然后把5号和3号入队,5号出队列,然后把与3号相连的且此时不在队列的5,4入队列,3号出队列,然后5号出原创 2016-04-01 11:37:50 · 1014 阅读 · 0 评论 -
hdu3440House Man差分约束系统
题意:给个n个不同的高度,一个人从最低点跳跃,每次可以跳到第一个比它高的位置,最后跳到最高点,然后每次最多可以跳的距离为D,而且在跳跃时可以在不改变给定顺序的情况下移动这些高度,使得最后起始点和终点的位置最远, 思路:自己想了一会,想的方向错了,我自己想的方法是将最小高度记为0,最大高度记为n-1,然后写查分约束方程,这了一会发现条件不足,没想法了,看了大牛们的解法发现原来以给定的顺序直接进行条件原创 2016-06-28 21:51:33 · 720 阅读 · 0 评论 -
poj1734Sightseeing trip(floyd求最小环)
这道题目是floyd求最小环,意思是这样的,有那么多的环,找到一个权的和最小的,然后把序号输出来,这个的话我上网上学习了用floyd求最小环,就是u到k,到v,再到u,v到u这段不经过k,那么就让这个环里k是最大的就行了,有一点是为什么�9E要先求环再求最短路呢,因为你k是最大的,u,v都不如他打,如果你先求了最短路的话,那么dis[i][j]就会已经经过k了,而我们是要比他小,所以,就是这样#incl原创 2016-06-23 11:35:47 · 450 阅读 · 0 评论 -
hdu5876 Sparse Graph(补图的最短路)
这道题目是补图最短路,是点(数据很大)然后把原图变成另一半,然后求源点到其他点的最短路,这道题如果硬来的话一定是超时的,这是不用想的,毕竟200000个点的话,边本来是5500条,但是要是找补图的边的话那就是20万*20万-5500,大概是这么多,这实在是太多了,肯定是不行的,所以呢暴力枚举所有点,如果与起点相连的边不在原图中,那么距离就是起点的距离+1,然后用BFS再把这些点设为起点,再枚举剩下的原创 2016-09-11 21:48:36 · 380 阅读 · 0 评论 -
hdu2544最短路(迪杰斯特拉)
这道题目就是模板题,只是想试一下这个优化过的迪杰斯特拉模板好不要用#include <iostream>#include <string.h>#include <queue>using namespace std;const int INF=0x3f3f3f3f;const int maxn=105;const int maxm=20005;struct Edge{ int原创 2016-08-10 20:54:20 · 446 阅读 · 0 评论 -
hdu4707Pet最短路(spfa)
这是一个非常睡得最短路,边都为1,其实用搜索也可以的,找距离大于d的点的个数#include <iostream>#include <queue>#include <string.h>using namespace std;const int maxn=100000+5;const int INF=0x3f3f3f3f;struct EdgeNode{ int to;原创 2016-08-10 21:00:42 · 385 阅读 · 0 评论 -
hdu5294(最大流+最短路)Tricks Device
这道题刚开始想了很久,而且之前一直不明白dicnic既然已经求了阻塞流,为什么还需要反向弧呢,现在如图: 2和3是一层,4和5是一层,然后你要是走1->2->4->6的话,如果没有反向弧,你会发现最大流是2,没有增广路了,而当有了反向弧之后,你还可以走1->3->4->2->5->6,以前总听别人说有反向弧,然而一直没找到合适的例子,今天终于让我找到了,非常开心 下面说一下今天这道题,这个题原创 2016-04-08 22:04:57 · 640 阅读 · 0 评论 -
hdu4725The Shortest Path in Nya Graph(最短路径)
题意:每个点放在一层,然后给了n个点,相邻的两层距离是固定的t,有额外m条边,然后求1到n的最短路径,如果没有则输出-1 这道题刚开始读错了,以为是每层只有一个点,其实每层可以有多个点,其次这道题目只说了相邻的两层之间的点的距离是t,可是并没有说同一层的点之间的距离是多少,这块我就想多了,刚开始我以为同层的距离是0,只可惜这只是我的臆想,只怪想象力太丰富,哎,然后这道题目的重点就是建边了,如果只有原创 2016-10-10 10:27:24 · 3337 阅读 · 0 评论 -
hdu5521 ICPC2015沈阳现场赛(最短路)
MeetingTime Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 2092 Accepted Submission(s): 658Problem Description Bessie and her friend Elsie原创 2016-10-07 11:13:52 · 1277 阅读 · 0 评论 -
差分约束系统
(本文假设读者已经有以下知识:最短路径的基本性质、Bellman-Ford算法。) 比如有这样一组不等式:X1 - X2 <= 0 X1 - X5 <= -1 X2 - X5 <= 1 X3 - X1 <= 5 X4 - X1 <= 4 X4 - X3 <= -1 X5 - X3 <= -3 X5 - X4 <= -3不等式组(1)全都是两个未知数的差小于等于某个常数(大于等于也可以转载 2016-06-24 19:45:59 · 250 阅读 · 0 评论 -
poj3159Candies差分约束系统(spfa+栈)
这道题目是典型的差分约束系统,小于等于是最短路 大于等于是最长路,核心在于:xj-xi<=bk,会发现它类似最短路中的三角不等式d[v]<=d[u]+w[u,v],即d[v]-d[u]<=w[u,v],即从u指向v建边,但是这道题很是魔性,一般我们用的都是spfa+stl的队列,然而这道题就是TLE到死,怎么都不好使,改成spfa+栈就过了,还有一点就是这道题目是我唯一遇到过的用cin取消同步也就是原创 2016-06-24 19:42:53 · 513 阅读 · 0 评论 -
AOJ2249Contest Page(最短路径spfa)
或说博主每次都会发现别人没发现的问题,然后一直卡死。。。。。 这是一道求最短路问题的同时,顺便把此时的最小花费求一下,重点是最短路相等的时候,不能再最短路相的地方直接同时求花费,而要单列出来求,那就是直接spfa,然后顺便加一下就ok了,代码如下#include <iostream>#include <stdio.h>#include <queue>#include <string.h>u原创 2016-03-28 20:23:38 · 495 阅读 · 0 评论 -
枚举+dijkstra(最短路删点) hdu5137How Many Maos Does the Guanxi Worth
这道题是一道最短路删点的题,题目的大概意思是,刘老板想通过关系网找到校长使自己的孩子能去上学,现在你的任务是删除刘老板到校长的关系网中的任意一人(刘老板和校长除外),使刘老板花费最大,然后求出被你删除之后的刘老板需要花费的最少的钱 解法:因为一共就只有30个点,所以每次删除一个点,然后枚举删除n个点的最短路,再求出这些种情况的最大值即可#include <iostream>#include <s原创 2016-03-22 13:45:58 · 551 阅读 · 0 评论 -
poj1062昂贵的聘礼(迪杰斯特拉)
这道题我一共见过三次,直到这次才费了好大的劲做出来,太恶心了,希望有生之年不要再碰到这个题 这道题需要注意几个点: 1.酋长不一定是最高等级,可能有他爸爸,他爷爷之类的。。。。。你懂得 2.不能以酋长为圆心画圆找整个圆,不能找直径区间,因为可能酋长满足条件,但是酋长的上限和下限两者超出了等级的限制,我在这个点上卡了好久,本来假期就知道这个点是错的,结果又错了 3.我这个是把所有点枚举了一遍,原创 2016-03-23 20:18:26 · 351 阅读 · 0 评论 -
poj1860Currency Exchange(最短路)
因为出的最短路专项,所以能想到,否则的话可能也想不到吧,最开始题意理解错了,以为是只要货币的数量大了就行,然后就spfa找只要超过了给的val就行啊,结果一直wa,后来发现应该是两种情况,第一是成正环,就是在这个环里,值会一直增加,超过n次就证明一定是存在这种环的,那么它变回原来的货币肯定会增大,第二种是不成正环的,就是正常操作一遍之后,会使原来的数变大#include <iostream>#in原创 2016-05-28 21:36:47 · 647 阅读 · 0 评论 -
poj1125Stockbroker Grapevine(最短路floyd)
这是一道很简单的floyd题目,题中说找到那个每个人到其他人最大的时间,然后从中找到最小值,直接一遍floyd就行,so easy#include <iostream>#include <string.h>using namespace std;const int INF=0x3f3f3f3f;int dis[205][205];int sum[205];int n;void prep原创 2016-05-30 12:45:16 · 325 阅读 · 0 评论 -
最短路poj2253(floyd)
FroggerTime Limit: 1000MS Memory Limit: 65536K Total Submissions: 31520 Accepted: 10164 DescriptionFreddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who原创 2015-10-24 14:06:55 · 410 阅读 · 0 评论 -
最短路径hdu1599(floyd)
#include #define inf 99999999//最大值定义为99999999很好,就算相加之后也不会超int2147483647using namespace std;int map[105][105],dis[105][105];int main(){ int n,m,a,b,c; while(cin>>n>>m) { in原创 2015-08-20 22:28:07 · 403 阅读 · 0 评论 -
poj2240Arbitrage(最短路floyd)
这个题目是换钱和另一个有点类似,只不过这个没有手续费,这道题在读入的时候有点麻烦,我用的map和string,剩下的就好说了,看钱会不会变多,它没说从哪种变成哪种,那么就得是多源最短路用floyd,里面是汇率用乘法,然后看看是不是比原来的多就可以了#include <iostream>#include <map>using namespace std;string str[35],s1,s2;原创 2016-05-30 12:19:38 · 425 阅读 · 0 评论 -
uva11478(spfa求负环)
这道题其实和uva11090类似,都是求负环,博主这里继续用spfa来写,需要注意的是,这里需要考虑0环,在一个环里,a边加一个数,b边减相同的数,到最后你会发现总和没变,在这里我想说每个顶点所连的边加减的数值随意,可以不相等#include <iostream>#include <stdio.h>#include <queue>#include <string.h>using namesp原创 2016-04-03 16:50:13 · 683 阅读 · 0 评论 -
floyd求最小环
floyd求最小环1 定义:通常来说最小环是针对有向图而言从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的.2.怎样求最小环呢?1传统的解决方法(dijkstra): 任意一个环的权值,我们都可以看成两个有边相连的结点i、j的直接距离加上i、j间不包含边(边i->j)的最短路径。求最短路径我们第一个想到的就是Dijkstra算法。而Dijkstra所求转载 2016-06-23 13:35:26 · 851 阅读 · 1 评论