图论-最短路
AcerMo
一只辣鸡大学生
展开
-
[Vjudge]一个人的旅行
题目描述如图单源最短路裸题,只需要在所有节点之外建一个起点,让它指向草儿家附近的城市且路长为0,然后以这个点为起点跑一边最短路就可以了代码//By AcerMo#include<queue>#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define lli long long intusi.原创 2021-11-11 09:17:48 · 161 阅读 · 0 评论 -
POJ2253 Frogger
floyd裸题#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;struct emm{ double x,y;}point[201];double pat...原创 2018-06-27 22:08:12 · 96 阅读 · 0 评论 -
NOIP模拟赛-货物运输(Toll)
题目在这里看到这道题我的第一思路是分层图最短路,分层的原因是我们可以将城镇的cost看作每一层的花费,每20件物资看作一层,那么终点的层数就是终点的物资/20,但是我们在SPFA中动态判断层数太麻烦,所以先处理一个分层的数组,每20位为一个区间,然后dis[ed][K[m]]=m->终点第[物资]层的最小值为物资,然后跑分层图,如何更新呢?判断当前要更新的点是城镇还是乡村,如果是城市,就判断...原创 2018-07-05 17:28:27 · 438 阅读 · 0 评论 -
BZOJ1179&&洛谷P3627 [APIO2009]抢掠计划
很显然一个点可以去若干次的意思就是你可以把一个环抢完,那么肯定是要缩点,缩完点之后,显然就是单源最长路呗,拓扑排序或spfa乱搞就ok了,没啥难度代码//By AcerMo#include<cmath>#include<stack>#include<queue>#include<cstdio>#include<vector&...原创 2018-08-03 16:44:46 · 272 阅读 · 0 评论 -
POJ1135Domino Effect
基本上是一道裸的最短路多米诺骨牌,让你求所有都倒下的最小时间,枚举就好代码//By AcerMo #include<queue>#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<algorithm>us...原创 2018-07-27 20:33:14 · 278 阅读 · 0 评论 -
洛谷P3008 [USACO11JAN]道路和飞机Roads and Planes
第一直觉是tarjan缩点+拓扑,但是不知道如何下手(据说正解就是这个)然后画了个图,发现,好像是个单源最短路!因为有单向边,所以一些点去不了,所以输出判dis就行然后!!!它TLE了!!!加优化,SLF和LLL优化,专氪网格图代码//By AcerMo#include<cmath>#include<deque>#include<cstdi...原创 2018-08-05 19:13:43 · 418 阅读 · 0 评论 -
纪中OJ 3470NOIP2013模拟联考8】最短路(path)
一开始一点思路都木有后来才发现,k只有10个,完全可以枚举走的顺序所以,实现就是求出每个点到其他点的最短路,然后暴力dfs枚举走的路线取min然后注意输出-1的情况和爆long long的情况代码//By AcerMo#include<cmath>#include<queue>#include<cstdio>#include<...原创 2018-08-06 17:04:07 · 265 阅读 · 0 评论 -
纪中OJ 5177【NOIP2017提高组模拟6.28】Trevel
动态SPFA水题,和之前某道魔法森林相似我们先存边,然后按L排个序,之后在将每一条边加入,每加入一条边,就以当前边的两个端点为起点,做一次双源最短路,不难发现,加入这条边后,这两个点最可能更新其他点初始化时除了1之外,其他点的dis=0,dis[1]=inf,然后我们按照R来做最长路,考虑点u,v,边 e,dis[v]可能的取值有三种,v之前被更新过,所以有一个dis[v],考虑题目的限制...原创 2018-08-12 13:00:54 · 330 阅读 · 0 评论 -
洛谷P1027 Car的旅行路线
几何+最短路我们根据已给的三个坐标,通过勾股定理,确认第四个点,然后SPFA时判断是不是同一个城市就行了代码//By AcerMo#include<cmath>#include<queue>#include<cstdio>#include<cstring>#include<iostream>#include<...原创 2018-08-20 09:56:26 · 186 阅读 · 1 评论 -
BZOJ3445&&洛谷P2176 [USACO14FEB]路障Roadblock
SPFA+大暴力啊先求一遍最短路,然后一个显然的性质,改边一定是在最短路上改,不然最短路还是最短路,然后我们就记录一下最短路径上的边,每次拎出来一条乘个2,然后跑最短路,求和第一次的最短路最大的差就行了代码//By AcerMo#include<cmath>#include<queue>#include<cstdio>#include<...原创 2018-09-01 07:44:54 · 273 阅读 · 0 评论 -
洛谷P3953 [NOIP2017]逛公园
SPFA+DFS我们先反向建图求一下n到各点的最短路,然后发现k特别小,我们就可以从0到k枚举每次可以额外走的长度,然后从1开始dfs,然后记忆化一下,记录还有到第i个点,还剩下j长度的方案数,然后记录一下这个状态在本次搜索有木有搜到过,搜到过就有环了呗然后就没了代码//By AcerMo#include<cmath>#include<queue>#...原创 2018-09-01 09:47:05 · 280 阅读 · 0 评论 -
BZOJ1922&&洛谷P2446 [SDOI2010]大陆争霸
维护两个数组,一个是最早到达的时间,一个是最晚将所有保护装置清空的区间,一个点只有将保护装置清空完才能去更新其他点,然后每次从队首取一个点,让他去更新相邻点以及保护它的点,然后每个点只进入队列一次,所以用了Dij+heap代码//By AcerMo#include<cmath>#include<queue>#include<cstdio>#in...原创 2018-09-02 17:05:21 · 239 阅读 · 0 评论 -
BZOJ1880&&洛谷P2149 [SDOI2009]Elaxia的路线
SPFA+Topsort我们不难发现在一张图里,假如u<--->v这条路径在起点到终点的最短路上,需要满足的条件是起点到这两个点中的较近点的最短路+终点到这两点中较近点的最短路+边权等于起点到终点的最短路,所以根据这个性质,他们两个可能走的公共边需要同时在两条最短路上都满足上述条件,然后我们将这些边捡出来,构成一张新图,根据最短路不存在环这个性质,那么新图就是可以跑拓扑排序滴,所以...原创 2018-09-12 09:37:07 · 222 阅读 · 0 评论 -
BZOJ2750&&洛谷P2505 [HAOI2012]道路
毒瘤题拓扑+SPFA+暴力枚举枚举起点,跑SPFA求出dis[i]然后每进行完一次SPFA,就枚举最短路图中的所有边--->满足dis[fr]+cost=dis[to]的边就是最短路上的边,把这些边标记起来,构成一张最短路图,显然这张图上不存在环,因为不可能存在一条路径满足u->v->z->u,显然我们可以拓扑统计到达每个点的方案数tot[to]+=tot[...原创 2018-09-06 20:46:43 · 296 阅读 · 0 评论 -
BZOJ3875&&洛谷P4042 [AHOI2014/JSOI2014]骑士游戏
SPFA处理后效性DP有后效性的意思就是会对后面的决策造成影响,很显然,这道题有环,所以我们当前选择可能会影响到当前选择(滑稽 .jpg所以我们可以跑个SPFA,定义f[i]表示打死i需要的最小代价,显然,f[i]=s[i]+所有能生成i的点的f之和,然后若i点更新了,那么能生成的点就会更新,然后去更新就好了代码//By AcerMo#include<cmath>...原创 2018-09-07 11:57:38 · 249 阅读 · 0 评论 -
BZOJ1614&&洛谷P1948 [USACO08JAN]电话线Telephone Lines
二分思路花费是所选的边里最长的边,所以我们肯定是贪心的把k次机会用在最长的k条边上,然后花费就是第k+1长的边,那我们不妨二分第k+1条边的长度,小于它的没有花费,那么跑最短路时就看做一条边权为0的边,然后大于它的边会花费一次机会,所以边权设为1,然后最后判断dis[n]若大于k,则说明当前二分值比答案要小,因为 需要多余k次机会才能使当前答案为答案,然后还要注意的一点使若n没有被更新,则输出...原创 2018-10-17 10:00:49 · 230 阅读 · 0 评论 -
BZOJ1486&&洛谷 P3199 [HNOI2009]最小圈
01分数规划->二分+dfs判负环思路考虑在平均值最小的环上的每条边都减去平均值之后,环的总权值是0,而平均值大于这个环的平均值的环每条边减去最小环的平均值总权值会大于零,反过来,小环减去大环的平均值会出现负权环,所以二分的判断条件就有了,二分一个最小平均值,若图中存在一个负环,那么就存在更小的平均值吐槽我把有向图建成了无向图,一直跑不过样例QWQ代码//By AcerMo#i...原创 2018-10-17 10:51:24 · 349 阅读 · 2 评论 -
POJ1860Currency Exchange
题目大意,你有n类钱,他们之间有m种换算关系,你初始的种类是fn,初始金额是fv,问你能不能经过一些换算使初始金额变大emm,差不多是裸的最长路,在每个点更新其他点之前判断他是不是初始种类,是的话比较当前dis是不是大于fv,大于直接输出YES然后return,如果一直没有,那就是NO代码//By AcerMo#include<cmath>#include<queue>...原创 2018-06-27 21:48:05 · 149 阅读 · 0 评论 -
BZOJ1706&&洛谷P2886 [usaco2007 Nov]relays 奶牛接力跑
emm,看着很难。。我们发现边一共100条那么点最多也就200个,所以我们将点离散化到1~200然后我们想到,从一个点到另一个点走k条路的方案可以用矩阵加速,那么最短路是不是也可以呢?然后我们想到矩阵可以加速的东西必须满足可以使用结合/交换律,发现最短路符合,所以我们将运算方法重新定义一下,+->min,*->+代码//By AcerMo#include<cmath>#...原创 2018-07-02 09:35:33 · 265 阅读 · 0 评论 -
洛谷P3095
中文题面不再赘述这题乍一看挺像最小生成树的,然而并不是,这道题是一道裸的SPFA最短路,我们只需要处理一下,两个点之间道路没有损坏,那么他们之间路径的边权是0就好了233代码//By AcerMo#include<cmath>#include<queue>#include<cstdio>#include<vector>#include<...原创 2018-06-20 12:03:39 · 337 阅读 · 0 评论 -
POJ 2449 k短路
原题戳这道题呢,恶心,emmmm用了一个A*,顺路学了A*;A*的主要思想就是一个函数f(x)=h(x)+g(x)此题中h(x)就是当前点到重点的最短路g(x)是从其他点掰过来的估价值先反向存图跑一遍SPFA,求dis,然后正向存图跑A*就Ok啦代码//By Acer.mo#include<algorithm>#include<iostream>#include<...原创 2018-03-18 09:46:27 · 242 阅读 · 0 评论 -
SPFA的LLL和SLF(以及自己浪出来的PY优化,不知道有没有别人写过QAQ)
以洛谷P3003为例原题戳显然是一道最短路,嗯,SPFA会TLE,被卡网格图了应该,然后,嗯,摸到了优化先说LLL和SLF,据说可以加快50%左右,优化方式是定义一个deque,双端加队列,每次更新玩一个点的最短路后,比较它和当前队列队首元素的dis值,比队首的dis小就q.front_push(),插到队首,反之q.back_push(),插到队尾,显然每次用当前图中有最短最短路的点来更新其他点...原创 2018-03-30 17:04:48 · 624 阅读 · 0 评论 -
洛谷 P3385 判负环dfs
原题戳emmmmmm,200000万条边居然能T掉,果断学了新的算法,dfs-spfa(),判负环;因为只需要判负环,所以初始dis数组为0,这时如果没有负环的话,要么不会更新,要么只更新一遍,效率比spfa快好多前向星写法By Acer.Mo#include<cmath>#include<queue>#include<stack>#include<...原创 2018-03-31 16:02:46 · 275 阅读 · 0 评论 -
POJ 3259 SPFA判负环
之前写了dfs判负环,基于题目只需要判负环并且数据卡时间,但是如果需要输出最短路,就需要正常的BFS了,这是道模板题,题目大意,多组样例输入,先是样例组数,然后是点的个数,边的个数,虫洞的个数,虫洞的含义就是可以减去这么多时间,说白了就是一条负边,记得单向,建完图后,最短路,判负环,dfs貌似也可以捕捉代码By Acer.Mo#include<iostream>#include<...原创 2018-04-01 08:06:43 · 183 阅读 · 0 评论 -
NOIP 2014 Day2T2 寻找道路
题目中文,不需要我说,直接讲思路题目要求找到一条从起点到终点的路径,而且保证最短的前提下,每个点的出边连接的点都要能到达终点,so第一步,反向建图,跑一遍bfs,确定能到达终点的所有点第二步,减掉连着不能到达终点的点的点以及不能到达终点的点,用一个随便什么数组记录能用的点就好了第三步,正常的最短路,只需要加上刚刚判断的这个点能不能用就好第四步,没了,emmm代码#include<cmath&...原创 2018-04-15 21:54:25 · 205 阅读 · 0 评论 -
洛谷P3393逃离僵尸岛
猛地一看,这是啥啊????思索了一下下,发现,嗯,这是一张最短路,我们不需要记录边权,只需要在更新到这个点时,加上点权就好然后如何处理危险城市呢?用dfs遍历并记录深度,然后更改点权最后两点比较重要的,记得开longlong&&记得给终点的点权附成0代码//By AcerMo#include<queue>#include<deque>#include&l...原创 2018-06-20 21:44:34 · 475 阅读 · 0 评论 -
BZOJ2763&&洛谷P4568飞行路线
题目中文不再赘述直接开讲题目中要求最短,那么肯定要跑最短路(我这里用的玄学u优化SPFA据说不优化会T,具体如何优化可以参考一下我的博客,玄学优化),那么如何跑出不选一些边的最短路呢?暴力枚举?显然不是很现实,所以我们要引入一个新的算法叫做分层图最短路,顾名思义,将一个图拆成若干个图,每个图中有若干个边权值为0,但是如果拆成许多图,那不就又成暴力了吗?我们不妨换一个思路想想,我们不需要拆图,我们只...原创 2018-06-16 18:34:54 · 315 阅读 · 0 评论 -
CODEVS1021&&洛谷P1186玛丽卡
中文题意不再赘述但是我要再说一下题目的意思,这个题目让博主煎熬了好久,题目的意思是,假如1->n的最短路中有一条道路被堵,那么最多需要多长时间才能到,博主一开始求的最长路发现样例都没过然后说做法 ,首先想到了暴力枚举,瞄一眼数据范围,真小,那就暴力枚举吧,真良心,好久没看到过第一眼暴力,正解还是暴力的题了,哎呀跑题了,回来,我们求出最短路后,枚举删掉每一条边,然后再跑最短路就好,但是我们怎么...原创 2018-06-25 15:37:27 · 247 阅读 · 0 评论 -
CF986A Fair
题意:你有n个物品,m个连接关系,k个标号,n个物品每个都有一个不大于k的编号,你的任务是求出n个点,每个点到k个标号中的s个最短路,每条边的边权都是1解法:普通的最短路肯定会T,这道题用的是多源BFS,每次讲1~k中一个编号的所有点加入队列去更新其他点,那么就变成了多源bfs,从一个点扩张到整张图变成了从多个点扩散到整张图,复杂度瞬间降低代码//By AcerMo#include<cma...原创 2018-07-08 08:34:43 · 748 阅读 · 0 评论 -
POJ3539 Elevator[同余类BFS]
同余类BFS我们发现h实在是太大,暴力枚举肯定不行,然后我们发现一个有趣的性质,若i能够到达,那么i+k*a也能到达,所以说我们不妨假设a是a,b,c中最小的一个,那么我们在%a的意义下,给0~a-1的数都连两条边i->(i+b)%a edge=b,i->(i+c)%a edge=c;然后dis[i]表示从1->i的最短路,然后对于每个dis[i]<=h,表示可以在到达h之...原创 2018-07-08 09:28:38 · 359 阅读 · 0 评论 -
POJ1125Stockbroker Grapevine
题目大意,你有n个人,他们之间相互传东西需要时间,你可以从任何一个人开始传,你要求出从哪个人开始传可以使得最后一个收到东西的人尽可能早的收到看一眼数据范围n=100,floyd大暴力求每一个人到其他人的最短路,然后循环每个人到其他人的最大时间,然后取最小代码//By AcerMo#include<cmath>#include<queue>#include<cstd...原创 2018-06-26 15:07:22 · 205 阅读 · 0 评论 -
POJ1502MPI Maelstrom
题目大意n个电脑,组成一个无向图,然后一些电脑之间有链接,问你从1号电脑下放文件后,最后一台电脑最早什么时候收到文件看一眼数据范围,n=100,欸,最近最短路都好水,floyd,然后dis2->n中取max代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<...原创 2018-06-26 15:13:24 · 231 阅读 · 0 评论 -
POJ1511Invitation Cards
题目大意你有n个学生,你需要把他们送到n个地方,再把他们接回来,道路是有向的,请问接送完所有学生最少要走多少步看一眼数据范围,好大,floyd跑不了了,那就SPFA吧,欸,跑一边SPFA貌似只能求1到其他点的dis,图是单向的,咋办?将图正着存一遍,倒着存一遍,然后跑两遍SPFA就好了,为啥自己画个图就知道了,然后累加dis代码//By AcerMo#include<cmath>#i...原创 2018-06-26 15:17:10 · 107 阅读 · 0 评论 -
POJ1724ROADS
题目大意你和你女朋友分手了,你想从1号城市跑到n号城市,每条道路有长度和花费,你的经费有限,所以你想在不超出经费限制的情况下,走最短的路到达n号城市思路带限制的最短路,不过这道题还是很水的,将dijkkstra里加上一个coin花费限制,然后跑最短路就行了,因为没有要求花费最小,所以我们只需要在不超过钱数限制的情况下跑最短路,也就是说更新dis值的条件是+coin<=限制&&...原创 2018-06-26 15:24:11 · 368 阅读 · 0 评论 -
BZOJ3669&&洛谷P2387[NOI2014]魔法森林SPFA
据说正解是LCT+Kru跑最小生成树没办法,谁让我这个蒟蒻不会LCT呢(Kru还是会的)说一下思路?我们开始比较正常的两种思路1.最小生成树,但发现有两种边权,瞎jb试试排序之后跑最小生成树,诶呦woc,70分,考试的时候应该是够了,但是不是正解2.二分,二分一个ab的上限,判断是不是可以走通,然后貌似太暴力,还是拿不到满分,emmm然后就看到了网上一种特别清新脱俗的算法动态加边的SPFA,我们先...原创 2018-07-08 17:00:13 · 209 阅读 · 0 评论 -
洛谷P3371&&P4849单源最短路【模板】
最短路是图论部分经常坑熊孩子的部分,一般会和dp一起考。求指定起点到图上所有点的最短路径 以洛谷 P3371 为例 地址 https://www.luogu.org/problemnew/show/P3371最常用的方法 有Floyd 复杂度O(n^3);floyd的过程相当于对每个点都进行了三角形松弛操作,就是假如a->b+b->c > a-...原创 2018-02-26 11:15:36 · 488 阅读 · 0 评论