![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最短路
文章平均质量分 79
冷月残星
这个作者很懒,什么都没留下…
展开
-
最大流,Floyd(UNIX插头 uva 753)
给n个插座,m个设备和k种转换器(n,m,k一开始跟着紫书上的提示做的。每个设备连到源点,容量为1。每个插座连到汇点,容量为1。转换器有无限多而且一个设备的插头可以经过任意多的转换器后再插入插座中。因此我们不需要知道转换的过程,只需要知道某个设备的插头类型最后是否能转换成某个插座的类型即可。因此建立一个转换器的有向图,类型为点,转换器为有向边。然后通过Floyd算法得到此图的闭原创 2016-07-14 14:12:48 · 749 阅读 · 0 评论 -
最短路+字典序最小+输出路径(Ideal Path,UVA 1599)
题目链接:https://vjudge.net/problem/UVA-1599在满足最短路的条件下,字典序最小,输出最短距离以及路径。一些思考:紫书上说可以只用一次BFS来完成,但是自己没有什么好的想法,而且网上也没有找到相关资料,而且两次BFS和一次BFS差距不大,所以就两次吧。如果只是单纯的求最短路,那么直接对源点跑单源最短路算法:BF原创 2017-06-06 13:33:33 · 3687 阅读 · 0 评论 -
非常规最短路(HDU 5335,Walk Out)
题目连接:https://vjudge.net/problem/HDU-5335题意:给你一个n*m的01矩阵,要求你从左上角走到右下角(可以迂回),路径将形成一个字符串,把这个字符串看成二进制数,这就是距离的定义。要你找一个最短的距离,并输出之。常规的最短路是累计边权或者点权的。而这类最短路是将路径上的字符连接成字符串的。而这个题目是将字符串理解成二进制数原创 2017-06-06 13:38:54 · 424 阅读 · 0 评论 -
邻接表与链式前向星
ZOJ 3877 Earthstone Keeper又遇到了一道卡空间常数的题目。如果用链式前向星就刚好卡过,如果用邻接表就超空间。原因是本题点巨多(1e5),但边相对来讲巨少(每个点最多8条边)。如果用邻接表来实现的话,一般就用vector嘛,我们都知道vector都是自动扩容的,在空间满了以后,就自动申请多一倍空间。如下代码所示。#include#defi原创 2017-04-20 15:35:57 · 3876 阅读 · 0 评论 -
最短路,前缀和优化连边,Dijkstra(UESTC 482,Charitable Exchange)
http://acm.uestc.edu.cn/#/problem/show/482做了这道题目很有收获,一方面是熟练了优化连边的技巧,另一方面是对Dijkstra有了新的感悟。关于优化连边的做法:首先离散化,将1e9范围的数离散化,重新分配编号,这样最多有2e5个节点。很显然,题目中的边是一种区间到单点的边,所以可以考虑线段树优化连边,可能是因为自己不够熟练,原创 2017-05-01 21:19:37 · 825 阅读 · 0 评论 -
最短路,网络流(HDU 5294,Tricks Device)
最短路+网络流算是很经典的套路了。但是自己还是一直WA得不明所以。原因是自己对edmondskarp算法的不理解。首先,这道题的图是无向图,这点从题干中可以很容易的得到。跑完Dijkstra后,我们得到了一个最短路树。最早听说最短路树的概念是在大白书P330上。意思是Dijkstra算法跑完以后会得到一个p数组,表示s到v的最短路径中v的前一个节点。显然p数组能表示一个原创 2017-05-01 17:43:32 · 575 阅读 · 0 评论 -
Dijkstra,平面图最大流(动物园大逃亡,LA 3661)
学会了用最短路求平面图的最大流。http://blog.sina.com.cn/s/blog_60707c0f01011fnn.html代码#include#define rep(i,a,b) for(ll i=a;i<=b;i++)using namespace std;typedef long long ll;const ll maxn = 2e6;con原创 2017-02-12 12:41:20 · 461 阅读 · 0 评论 -
Dijkstra(低价空中旅行,LA 3561)
任何最短路的本质都是状态的最短路。其中涉及状态的定义以及状态的转移。当然你也可以用图论对状态建模,然后再跑普通的Dijkstra。代码#include#define rep(i,a,b) for(int i=a;i<=b;i++)using namespace std;const int maxn = 5000;const int inf = 0x3f3f3原创 2017-02-12 10:46:49 · 405 阅读 · 0 评论 -
Dijkstra,最短路(蒸汽式压路机,LA 4128)
任何问题的最短路都是状态的最短路。代码#include#include#define rep(i,a,b) for(ll i=a;i<=b;i++)using namespace std;typedef long long ll;const ll maxn = 110;const ll inf = LONG_LONG_MAX>>2;ll dr[4]={-1, 0,原创 2017-02-11 20:15:11 · 383 阅读 · 0 评论 -
Bellman-Ford,最短路(在环中,UVA 11090)
给你一个边权为正的有向图,节点数最多50个。问你平均长度最短的圈的平均长度是多少。如果没有就输出没有,有就输出具体数值。显然圈有很多,每个圈的长度也有很多。最简单的思路就是找到所有长度,或者所有最短长度,然后从中挑一个最小的就好了,但是好像没有什么算法能找到所有圈以及他们的所有长度或最短长度的。我最多知道如何判断一个图中有没有圈,而且这样的算法还不少。比如dfs,Floyd判圈法,Bellma原创 2017-02-11 15:34:25 · 280 阅读 · 0 评论 -
Dijkstra,最短路树(战争和物流,LA 4080)
学会了最短路树。#include#includeusing namespace std;typedef long long ll;const ll maxn = 110;const ll maxm = 1010;const ll inf = LONG_LONG_MAX>>2;struct Edge{ ll from,to,dist;};struct He原创 2017-02-10 12:48:29 · 821 阅读 · 0 评论 -
Dijkstra,记忆化搜索(林中漫步,UVA 10917)
就是先对终点求一个单源最短路,然后再对起点跑一个记忆化搜索。一开始搞错家和公司的位置了。。。卒。。。如果没AC,别太发牢骚,一定是你哪里没做好了。如果不用心,啥都做不好的。代码#include#includeusing namespace std;typedef long long ll;const ll maxn = 1010;const l原创 2017-02-10 10:33:46 · 388 阅读 · 0 评论 -
Dijkstra(机场快线,UVA 11374)
#includeusing namespace std;const int maxn = 1010;const int inf = 0x3f3f3f3f;struct Edge{ int from,to,dist;};struct HeapNode{ int d,u; bool operator < (const HeapNode& rhs) const原创 2017-02-09 21:40:13 · 295 阅读 · 0 评论 -
【2016-大连赛区网络赛-I】补图最短路(Sparse Graph,hdu 5876)
http://blog.csdn.net/YYecust/article/details/52497200第一次参加ACM-ICPC网络赛,表现得十分不好,可能因为平时做的题目都太简单,而且不熟悉ACM-ICPC网络赛的套路,导致所有题目都尝试用暴力或者比较常规的思维来做,从而导致超时。这题比赛时,就改了一下模板,改成不相连时才进行扩展,超时。然后改进了一下思路,如果某转载 2016-09-11 11:39:12 · 592 阅读 · 0 评论 -
最短路,Dijkstra(有趣的赛车比赛,uva 12661)
d[u]是从s出发到u的最早时刻。早到不会反而晚出发,即越早到越好。Dijkstra改编一下,d[v]=d[u]+DIST,DIST是从u到v需要的时间,包括等待和路上的时间。讨论清楚DIST即可。开放时间小于通过时间的边可以直接无视。代码#include#include#include#include#define maxn 310using na原创 2016-08-05 15:50:44 · 297 阅读 · 0 评论 -
贪心,Dijkstra(The path,HDU 5385)
贪心构造距离,Dijkstra构造边。有一些细节写错了,在遍历边的时候,把e.v写成了i,WA了一段时间。一开始写代码的时候就要小心。代码#include#include#includeusing namespace std;const int maxn = 100010;const int inf = 0x3f3f3f3f;int n,m;in原创 2017-07-16 12:48:49 · 193 阅读 · 0 评论