最短路
EMber _
人但有追求,世界亦会让路。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
bzoj1003 物流运输 spfa+dp
Description 物流公司要把一批货物从码头A运到码头B。由于货物量比较大,需要n天才能运完。货物运输过程中一般要转 停好几个码头。物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种 因素的存在,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够按时到达目的地。但是 修改路线是一件十分麻烦的事情,会带来额外的成本。因此物流公司希望能原创 2017-02-24 22:35:02 · 282 阅读 · 0 评论 -
bzoj1598[Usaco2008 Mar]牛跑步 K短路模板 spfa+dij
K短路的裸题。。 dij:#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<vector>#include<ctime>#include<cstdlib>#include<queue> #include<ext/pb_ds/priority_queue.hpp>#defin原创 2017-05-25 17:07:39 · 384 阅读 · 0 评论 -
bzoj1731[Usaco2005 dec]Layout 排队布局 差分约束
差分约束的裸题,顺便学习一下差分约束。。表示以前只会差分。。发现这个东西好像就是用差分的思想转化题目模型,感觉肯定会有超强的脑洞题目= = 这题的话,我们可以对题目模型做如下转化。对于亲密的奶牛,d[y]-d[x]<=z,那么我们连一条x->y边长为z的边,表示x,y的距离至多为z。对于那些互相憎恶的奶牛,d[y]-d[x]>=z,那么我们连一条y->x边长为-z的边,表示从y到x的距离至少为z。原创 2017-06-05 22:52:17 · 403 阅读 · 0 评论 -
bzoj1715 [Usaco2006 Dec]Wormholes 虫洞 spfa
裸的判断负环,直接spfa暴力判断就好,但是没注意负权边不是双向边,强行被坑正确率= =#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)#define inf 0x3c3c3c3c原创 2017-06-05 23:16:33 · 506 阅读 · 0 评论 -
bzoj1726 [Usaco2006 Nov]Roadblocks第二短路
次短路的裸题,由于不是树不能用dp,所以spfa分情况讨论就好了 disa[x]+val[i]小于disa[v]时,将原来的disa[v]更新disb,然后disa[x]更新disa[v] disa[x]+val[i]大于disa[v]时,如果disb[v]小于disb[x]+val[i]就可以用disa[x]+val[i]更新disb[v] 最后就是disa[v]==disa[x]+val[原创 2017-06-02 22:28:39 · 381 阅读 · 0 评论 -
bzoj3445[Usaco2014 Feb] Roadblock 最短路(记录路径)
本来是一道傻叉题目,结果不认真看题被坑了。。 要求差最大,由于最短路不固定,所以要枚举而不能直接算出最长边然后*2,,我一开始floyd爆草结果WA了无数发。。后来才知道spfa直接枚举就好了。。 顺便贴一下三种最短路记录路径的方法。#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namesp原创 2017-06-03 21:51:39 · 1183 阅读 · 0 评论 -
bzoj1706 [usaco2007 Nov]relays 奶牛接力跑 矩阵乘法(倍增floyd)
题意:求长度为n的最短路。 设f[i][j]为i,j最短距离,求出矩阵f。 由floyd可以知道,我们每一次找中间点,然后更新最短路。 那么可以发现,最短路其实是由两段路径组成的(普通最短路,注意是段不是条) 那么,我们只要做k次floyd,就可以求出由k段路径组成的最短路。 由于n<=1e6,不能直接上,所以用矩阵乘法。 那么问题是题目中要求的是k条而不是k段,这我们怎么办呢? 我们原创 2017-06-19 22:16:18 · 699 阅读 · 0 评论 -
bzoj1690[Usaco2007 Dec]奶牛的旅行 01分数规划+spfa(最优比率环)
题意:给你一幅图,点上有收益,边上有花费,让你走过一段路,使得收益和/花费和最大。。 一开始各种奇怪方法上,因为从来没做过01分数规划= =。。 其中看起来最像正解的应该是spfa的时候两个一起更新,把花费和收益都搞到边上去,但是sb的我没有发现,题目要求是一个环!!!!!!!!!!! 01分数规划也不是很难,推荐一篇讲的很好的文章。 http://www.cnblogs.com/perse原创 2017-06-20 16:14:39 · 487 阅读 · 0 评论 -
bzoj2407 矩阵 spfa+构造
这题考试的时候没什么想法,打了个dfs水一发,结果连30分都没拿到。。 有一种水法可以A,就是枚举第一条出边,然后去掉这条边跑最短路,考场上有人A了。 如果不是有水法的话这题应该还是有些难度的。我们先跑一遍spfa,然后构造,中心思想是只保留对于答案有贡献的,这样构造才有意义。 接下来贴题解(from hzwer)。1: 该边为(u,1,w) ,即从u点连向原点的边若 u != p[u] 说原创 2017-07-15 21:10:02 · 587 阅读 · 0 评论 -
bzoj5047 空间传送装置 spfa
题意: 太空中一共有n座星球,它们之间可以通过空间传送装置进行转移。空间传送装置分为m种,第i种装置可以用4个参 数a_i,b_i,c_i,d_i来描述。因为时空抖动的问题,在非整数时刻禁止使用空间传送装置。如果在整数s时刻使用装 置,那么需要花费((a_i*s+b_i) mod c_i)+d_i单位时间才能完成传送。现在是s时刻,小Q位于1号星球,请写一个 程序计算从1号星球到每个星球最少原创 2017-09-24 16:23:39 · 460 阅读 · 0 评论 -
bzoj2709 [Violet 1]迷宫花园 二分+spfa
题意:一个矩阵,起点终点固定,有障碍,横向相邻两格的时间固定为1,要求纵向的时间,然后给定L,要求从起点到终点在<=L的情况下尽量大。 这煞笔二分题啊,还不卡精度简直良心啊,然后我因为没写head[x]=tot而调了半个小时。。???没脸见人了┴─┴︵╰(‵□′╰)。#include<cstdio>#include<cstring>#include<iostream>#include<alg原创 2017-10-20 21:40:51 · 321 阅读 · 0 评论 -
Atcoder Regular Contest 084
题意:给出一个数k,求k的倍数中的一个数,使得这个数的数位和最小。k<=1e5. 感觉做这题智商被碾压了,完全想不到spfa的做法,比赛的时候打数位dp打到倦生都过不去。。 先讲spfa做法:从1开始,向x+1连边,代价为数位差,也就是1,或者向x*10,代价为0,注意是在%k意义下,那么答案就是dis[0]+1,即到达k的倍数中最小的路径。#include<cstdio>#include<c原创 2017-11-07 22:00:38 · 343 阅读 · 0 评论 -
bzoj1097[POI2007]旅游景点atr spfa+状压DP
题意:给出一个图,要求一定经过一些点,而且经过顺序有要求,点的范围是2到k+1,问最短路径。这题卡常卡的我蛋都碎了都没卡过,最后懒得卡了。 其实很简单的一道题目如果不卡常的话,先对于1..k+1跑spfa以后,把题目要求的遍历顺序加入状态中,直接转移就可以了,挺显然的。 代码:(TLE)#include<cstdio>#include<algorithm>#include<cstring>原创 2017-11-01 14:32:55 · 274 阅读 · 0 评论 -
bzoj3040最短路 road dij+heap
tmd这题的空间卡的我蛋都碎了。。 1e6的点,1e7的边,我开3个1e7的数组就MLE?你tm有本事再开小点? 。。经历了从优先队列——>stl配对堆——>斐波那契堆(手写)——>手写配对堆的过程。。tmd一个dij我写了一晚上我也是醉了。。 最后还是得用hzwer的STL配对堆,,空间能开的再走心一点?#include<iostream>#include<cstdio>#include原创 2017-04-22 21:32:54 · 658 阅读 · 0 评论 -
bzoj1579 [Usaco2009 Feb]Revamping Trails 道路升级 分层图dij+heap
明显裸的分层图,居然还TM要dij+heap,白打半天spfa。。。差评(。 不过熟悉了一下dij+heap好评)。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cstdlib>#include<vector>#include<queue>#define inf 10000原创 2017-05-23 16:08:57 · 459 阅读 · 0 评论 -
bzoj1576[Usaco2009 Jan]安全路径Travel(堆优化dijkstra+并查集)
spfa会被卡。。 思想和3694差不多。 就是最短路树要自己跑dij建出来,其余的基本上一模一样。#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) f原创 2017-05-10 22:27:07 · 383 阅读 · 0 评论 -
bzoj1624
分析:我真是做题做傻了。。居然在想什么奇怪的dp。。直接floyd之后随便算不好吗???我居然老是想O(MN)的dp,看来不能被数据范围所左右。。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=原创 2017-03-08 21:22:26 · 239 阅读 · 0 评论 -
bzoj1631
正反两边spfa,最后取个max就可以了。#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;const in原创 2017-03-05 10:25:38 · 215 阅读 · 0 评论 -
bzoj1614
分析:因为求路径的最大值最小,那么二分答案,只要边权小于二分值得都可以为0,否则为1,因为如果边权小的话,对于答案很明显没有影响,,大于的话用免费去点就行了。。一开始还以为是分层图。。果然我还是太naive了。#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstrin原创 2017-03-05 22:02:17 · 311 阅读 · 0 评论 -
bzoj3408: [Usaco2009 Oct]Heat Wave 热浪
分析:一开始我还以为我看错题了。。结果交上去1A的时候我才发现是我太年轻。。没想到gold还有裸spfa。。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i原创 2017-04-06 22:22:53 · 815 阅读 · 0 评论 -
bzoj1681
分析:sb最短路,被重边坑,被排序坑。。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std; int n,m;原创 2017-03-29 09:04:40 · 301 阅读 · 0 评论 -
bzoj2330 [SCOI2011]糖果 差分约束
分析:比较经典的差分约束,对于每种情况我们可以通过不同的连边方式来体现。 1.=,add(x,y,0),add(y,x,0) 2.<,add(x,y,1) 3.>=,add(y,x,0) 4.>,add(y,x,1) 5.<=,add(x,y,0) 其中2,4是无等于号的,如果x=y,明显无解。 然后连边,连边完以后跑spfa最长路,注意这里spfa先把所有点加入,然后一个个跑,具体看原创 2017-04-07 16:56:52 · 253 阅读 · 0 评论 -
bzoj2019
分析:把边权用d减去然后跑最长路就好了。#include<cstdio> #include<cstring> #include<algorithm> #define inf 1000000000 #define maxn 1010 using namespace std; int head[maxn],next[maxn],to[maxn],len[maxn],dis[maxn原创 2017-03-29 14:25:17 · 287 阅读 · 0 评论 -
bzoj3394
分析:sb最短路。。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(ll i=a;i<=b;i++)#define fd(i,a,b) for(ll i=a;i>=b;i--)using namespace std; typedef long long ll原创 2017-03-29 14:51:48 · 246 阅读 · 0 评论 -
bzoj4773负环
Description在忘记考虑负环之后,黎瑟的算法又出错了。对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数。保证图中不包含重边和自环。 Input第1两个整数n, m,表示图的点数和边数。 接下来的m行,每<=三个整数ui, vi, wi,表<=有一条从ui到vi,权值为wi的有向边。 2 <= n <= 300 0 <= m <= n(n <原创 2017-03-24 22:04:07 · 748 阅读 · 0 评论 -
bzoj3891
分析:这题目我想了半天,其实是想到枚举汇合点的。。但是我以为两头牛相遇以后一定得一起走。。那岂不是要跑分层图?woc分层图还WA?看了题解才发现原来直接枚举汇合点就行了,凎。这是出题人的锅吧喂!然而别人跟我解释说。。人家那里用的是can不是must,是我语文不好我还是滚回去学文化课吧。。#include<cstdio>#include<cstring>#include<algorithm>#i原创 2017-03-15 21:47:53 · 632 阅读 · 0 评论 -
bzoj2015
分析:一看哇还要询问难道数据结构?结果上了厕所回来发现是裸题。。直接从1跑一遍spfa就行了。。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;int n,m;const int N=原创 2017-03-16 16:58:55 · 299 阅读 · 0 评论 -
bzoj2763[JLOI2011]飞行路线 分层图最短路
裸的分层图最短路,直接做就好了,问题是手动循环队列的那个地方要加上,不然RE到爽。。而且注意加上了以后改变一下队列的存储顺序。。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(i原创 2017-04-14 09:25:19 · 845 阅读 · 0 评论 -
bzoj1179: [Apio2009]Atm tarjan+spfa
题意:一个有向图求从s出发,到某一些规定点的最长路径。 一开始不化模型然后直接无脑dfs,这就是不把最短路当最短路,煞笔一个我,样例都过不去才发现问题。 然后简化了一下题意。。这不就裸的么。没什么好说的。#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define fo(i,a,b) for(int原创 2017-10-25 17:15:07 · 569 阅读 · 0 评论
分享