最短路
Rem_Inory
这个作者很懒,什么都没留下…
展开
-
【题解】洛谷P1119 灾后重建(floyd)
这是一个有条件的最短路问题,当时间为t时某个村庄才会被修好,修好的村庄之间的路才能贯通、求最小路,那么我们就记录t数组,在floyd前提条件下判断中间点村庄修好的时间是否小于等于给的时间,得到最短路。如果开头结尾村庄修好的时间比给的时间小或相等,并且开头和结尾的村庄有边相连,那么就输出最短路的答案,否则输出-1 #include<cstdio>#include<ios...原创 2018-07-18 22:13:42 · 237 阅读 · 0 评论 -
【题解】洛谷P1491 集合位置(次短路)
解决k短路问题有很多思路,不过因为这道题目是次短路,所以我们考虑的可以简单一些。先跑一遍spfa,记录下最短路的路径和在这条路上每个点的前驱,然后枚举最短路的路径删边,再重复跑最短路,取最小值。这样求得的就是次短路了。#include<cstdio>#include<iostream>#include<algorithm>#include<...原创 2018-08-25 18:00:40 · 474 阅读 · 0 评论 -
【题解】洛谷P2149 [SDOI2009]Elaxia的路线(记忆化搜索 最短路)
题目里已经明示了这道题的目的:具体地说,就是要求无向图中,两对点间最短路的最长公共路径。那么我们首先得把两对点的每一个点到其他点的最短路求出来,可以通过spfa来解决。这里我开了一个二维数组dis[s][v],s范围从1-4,分别代表出发点为x1,y1,x2,y2的四种情况,v则是其他点的编号。存下这个信息后,我们就需要找到最短路的公共部分。我们首先让Elaxia从宿舍(x1)出发,然后求在她到达...原创 2018-08-23 22:14:17 · 233 阅读 · 0 评论 -
【题解】洛谷P1993 小K的农场(差分约束 dfs 最短路)
做多了应该能一眼看出这道题使用差分约束解决。根据1/2/3三个序号所代表的含义建立不等式组,然后我们将符号统一成一个方向跑最短路或者最长路,这里我选择跑最短路。如果出现在图内出现负环就代表不行,而如果用bfs-spfa的话会T几个点,所以改用dfs-spfa来解决。卡着时间过去了#include<cstdio>#include<iostream>#include&...原创 2018-08-23 19:31:44 · 214 阅读 · 0 评论 -
【题解】洛谷P3953 逛公园(最短路 动态规划)
NOIP2017最难的题目。。。这里给一种比较方便理解的做法。拿到这个题目,啥也不用想,首先得把最短路求出来。然而求最短路时我们要反着建图,也就是求出n到其他所有点的最短路。为什么这样做呢?因为这样可以避免正向某个点无法到达n点的情况。求出最短路后,我们可以利用动态规划解决这个问题。首先考虑没有0边的情况。我们开一个二维数组f[u][know],代表在反向图中从u到n与从u到n的最短路径之...原创 2018-08-23 17:25:12 · 280 阅读 · 0 评论 -
【题解】codevs P2218 补丁vs错误(最短路 状压)
我们可以将b+、b-、f+、f-集合用0和1的二进制表示来进行状态压缩,然后枚举软件的所有状态,如果当前状态取反&补丁b+==0并且当前状态&b-==0说明软件包含了补丁中的所有错误,可以使用。然后对原来的软件我们让他|能修补的错误与不能修补的错误,最后减去能修补的错误,然后将当前状态与利用补丁后的最终状态连上权值为输入的单位时间的边。最后跑最短路求得当软件压缩后所代表的数为0时的...原创 2018-08-20 14:32:23 · 164 阅读 · 0 评论 -
【题解】codevs 1391 伊吹萃香(分层图 最短路)
对于这道题我们可以利用分层图来解决。我们首先设点1~n为白洞,点n+1~2n为黑洞。首先对于每一个点,由于可以留在原地,而且过了一秒之后路另一端会变色,所以我们将自己所代表的白点与自己所代表的黑点连边,边权为零,意思就是在某个点为白洞时选择留在原地,不消耗体力。同样的,我们将自己所代表的黑点也就是n+i与自己所代表的白点连边,边权为读入的是停留的点为黑洞时所要消耗的体力。然后我们将读入的点连边...原创 2018-08-20 09:23:33 · 305 阅读 · 0 评论 -
【题解】洛谷P2939 改造路(最短路 分层图)
因为有k条道路可以将权值变成0,所以我们可以构建分层图,读入边后循环k,将自己与下一层到达自己的点相连,到达自己的点与下一层自己所在的点相连,下一层的到达自己的点与自己两个点之间互相相连(注意这个是双向的)。然后就可以跑最短路,从1到(k+1)*n。这道题队列的spfa会TLE,所以我们可以进行堆优化,然后卡过去。#include<cstdio>#include<iost...原创 2018-08-18 21:23:01 · 921 阅读 · 0 评论 -
【题解】洛谷P1613 跑路(倍增 最短路)
这道题一开始很不好想,因为是有向图且不能只求最短路后倍增,因为绕弯子可能绕出来的总路程恰好是2的倍数能1s跑完。不过题解第一篇给了很大的启发。这道题目求1号点到n号点最短几秒到达,那么我们可以把两个点之间经过的时间记下来,跑最短路就好了。开布尔类型三维数组b[x][y][k],代表从x到y是否存在一条2^k长度的路径。初始化距离为最大值,b数组为false。读入数据时,将读入的两个点之间的距离连上...原创 2018-08-08 21:09:55 · 200 阅读 · 0 评论 -
【题解】洛谷P2296 寻找道路(最短路 bfs)
这道题理论上用bfs是可以解决的,但要判断的条件比较多。看到数据范围后,我决定还是用最短路来解决更加方便。思路就是我们要处理出不能用的点,然后跑最短路时判断如果出现这个点跳过就好了。判断不能用的点,我们可以从终点开始扩散,将到达的每一个点打上标记。这样我们就可以初步找出从起点出发进入某个点是死胡同的情况。处理出这些点后,我们再从起点出发,对每一个打过标记的点进行操作,如果打过标记的点扩展出...原创 2018-08-12 19:56:09 · 348 阅读 · 0 评论 -
【题解】洛谷P1979 华容道(bfs)
这道题目注意反数组和dx与dy数组应对应#include<cstdio>#include<iostream>#include<algorithm>#include<cstdlib>#include<cstring>#define inf 1e9using namespace std;const int maxm=1...原创 2018-08-02 18:49:33 · 280 阅读 · 0 评论 -
【题解】洛谷P1983 车站分级
拓扑排序 不会那我们可以尝试将指出来的车站与未指出来的车站连边,跑最长路就行了。。。如果用邻接矩阵的话,是不需要判重的,注意更新数据,跑spfa即可,最后答案应当加上1因为有单独的一级。但会TLE, 只能得70分。#include<cstdio>#include<iostream>#include<algorithm>#include<...原创 2018-07-23 09:31:39 · 286 阅读 · 0 评论 -
【题解】洛谷P1772 物流运输(动态规划 spfa)
对于这道题目我们可以将其分解为两个分问题来解决,首先求在任意一段时间内某些码头被禁用的情况下从1到m的最短路径,然后运用动态规划求出最小值。对于最短路径,我们可以用spfa来求。因为码头有禁用的情况,所以这里我们开一个ban[i][j]数组,代表第i号码头在第j天被禁用。time[i][j]记录在第i到第j天里从1到m的最短路径。spfa中给出要求的开始时间和末尾时间,初始化can数组代表i号...原创 2018-07-20 22:19:40 · 248 阅读 · 0 评论 -
【题解】 洛谷P3385 负环(模板)
关于这道题我的上一篇题解 Spore里有对负环判断的解释,可以跳转进行研究。这里只贴出代码。。#include<cstdio>#include<iostream>#include<algorithm>#include<cstdlib>#include<cstring>using namespace std;const i...原创 2018-07-20 21:11:44 · 172 阅读 · 0 评论 -
【题解】codevs P2645 Spore(spfa 负环)
一开始以为这是比较裸的spfa模板题,写上去之后只有20分,原因何在?再读一遍题我们发现这道题可能有负环存在,而如果有负环存在,那最小值就会沿着这个环一直减小。。所以我们需要判断负环。设一个cnt数组统计一个数进入队列的次数,初始化cnt[1]=1。当寻找最短路向外扩展时cnt[y]=cnt[x]+1。如果这个图是链状结构走到终点,那cnt[n]应当=n,但如果有负环存在的话,那cnt[n]一...原创 2018-07-20 21:10:01 · 140 阅读 · 0 评论 -
【题解】洛谷P1828 香甜的黄油(最短路)
几乎是一道模板的最短路问题,但我们为了记录答案的最小值,可以暴力枚举从1-n作为出发点,记录下每个牧场有多少头奶牛,然后求最短路,答案就是1-n号牧场最短路*该牧场奶牛数量之和,不断取最小值就行。这道题在洛谷上用spfa可以AC,用floyd会TLE 3个点,用不加优化dijkstra也许会TLE 3个,这里把三个代码都贴上来,以供参考。AC 100:spfa#include<cs...原创 2018-07-20 21:03:46 · 842 阅读 · 0 评论 -
【题解】洛谷P1073 最优贸易(spfa 分层图状态转移)
https://www.luogu.org/blog/user15019/solution-p1073这个题使用分层图状态转移来解决的思想如上,不过个人觉得可能那种建图方式有些繁琐,所以出了个写了个简化版本。我们没有必要把1-n个城市的买入卖出收益存入数组里,在循环里设一个临时变量,然后建图时,将i和i+n相连赋权值,而不用按照第一层的图在第二层找到对应的点,只用竖直下去就可以,这样在跑s...原创 2018-07-20 20:56:40 · 298 阅读 · 0 评论 -
【题解】洛谷P1552 牛的旅行(floyd)
这道题乍一看非常头疼,但仔细读完题之后,我们明白它其实想让我们求两个牧场间最小可能的直径。对于直径的定义就是牧场中最远两个牧区之间的距离,而这个距离指的是最短路的距离,那么我们将直径分开来求。先跑一边floyd计算两个点之间的最短路,然后记录在同一个牧场内假如以一个点作为道路构建的一个出发点,在该牧场内离这个点最远的那个点的距离(同一个牧场内的牧区是两两互通的)。然后我们再处理道路相连的情况,枚举...原创 2018-07-18 22:23:25 · 304 阅读 · 0 评论 -
【题解】洛谷P3946 小鸟的点心(spfa)
稍微思考可以发现这道题目是最短路问题,但我们有一些特殊的情况需要考虑。当积雪增长速度q=0时,我们设每个点雪涨到无法通行的位置的时间(因为南小鸟的速度是1m/s 实际上路程在数值上就是时间了)是最大值INF(因为雪不能涨了嘛),否则用(l[i]-h[i])/q(注意这里的差和除数都是double类型,最后转化成int类型)计算出时间来。然后我们建图跑spfa,这里更新最短路的条件有两个:1.下...原创 2018-10-01 20:53:57 · 233 阅读 · 0 评论