最短路
dijkstra,Floyd,spfa等最短路算法
_rhinoceros_
非淡泊无以明志,非宁静无以致远。
展开
-
(数学)P1037 产生数
一、算法分析开始时写了一个搜索,果断超时,然后意识到答案就是每一位的转移可能种类的乘积。然后果断祭出离散数学,一发传递闭包加高精AC。二、代码及注释#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;stri...原创 2020-01-31 11:42:12 · 228 阅读 · 0 评论 -
(Floyd算法的妙用)洛谷P2419 [USACO08JAN]牛大赛Cow Contest
一、算法分析floyd算法可以将两个点之间的“到达”关系进行拓展。本题可以将两个奶牛间的确定的比较关系视作一种“到达”关系。然后再进行拓展。当一个点可以“到达”所有其它点的时候,就说明这个奶牛是与其它奶牛可比的,也就是说其是可以确定名次的。二、代码与注释#include<iostream>#include<cstdio>#include<cstring>...原创 2020-01-15 18:31:18 · 150 阅读 · 0 评论 -
(floyd)洛谷P2888 [USACO07NOV]牛栏Cow Hurdles
一、算法分析题目的意思显然就是要用Floyd来解,直接套上模板。最开始还理解错了题意,以为就是一个纯模板题,后来发现没有那么简单。注意区分合理化条件和最优化条件。二、代码及注释#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<...原创 2020-01-15 22:22:21 · 161 阅读 · 0 评论 -
(单源最短路)[USACO11DEC]RoadBlock S
一、算法分析首先想朴素的方法,存图,先跑一遍最短路,然后枚举扩大二倍的边,然后再跑最短路。然后优化,易证扩大的边必然是原最短路的边,所以要记录原最短路的边,记录方式是写一个pre数组,这样从后往前扫一遍就行了。但是注意两个难点,一是如何在链式前向星中扩大边权,我采用的方式是,用邻接矩阵来存某两个点a到b的边在前向星数组中的w的编号。二是要注意,只有第一次跑单源最短路的时候,要记录pre数组,之后的都不能改pre数组了,否则可能会发生死循环,我采用的解决方法是给dijkstra函数加一个参数用来标记是否是第原创 2020-07-02 16:48:19 · 3237 阅读 · 0 评论 -
每日水题(002-1)(最短路)P2083 找人
一、算法分析本来是打算找一道搜索题做的,然后找到了这个题,结果仔细一看,多起点,单终点,正着走反着走完全等效,然后直接套上dijkstra板子就过了(虽然用时是BFS的十倍)。基本思路是把要找的人看做起点,还有就是细节处理方面,每个房间有两个位置参数,即层数与房间号,这两个数可以直接压成一个数用来表示房间(见代码)。二、代码及注释#include<iostream>#inclu...原创 2020-02-22 15:31:35 · 140 阅读 · 0 评论 -
(dijkstra,二分答案)P1396 营救
一、算法分析这道题让笔者想起了通往奥格瑞玛的道路这道题,可以说是有异曲同工之妙了。首先题目明确说明了,求最大值最小。一般这样的就与二分答案有关,于是我们记录下来每条边的长度,答案一定是这些长度中的一个,然后将各边的长度排序,二分答案就行了(相当于套一个二分答案的板子和一个dijkstra的板子)。细节处理在代码注释上。当然本题还有并查集等其它解法,这个随后补上。二、代码及注释#includ...原创 2020-02-14 23:54:37 · 244 阅读 · 0 评论 -
(算法分析,无代码)洛谷P3063 [USACO12DEC]牛奶的路由Milk Routing
一、算法分析乍一看以为是网络流,差点弃题,因为网络流还没看。。。但是显然这不是一道网络流,题目描述很明显,单源双向边最短路径问题,这道题关键在于边权的处理方面,所以先手算一下样例。开始的时候自己手算样例算半天一直不对,后来才看到下面还有一个说明提示(所以以后一定要多看说明提示里面的内容)说明提示:FJ wants to send 15 units of milk through his pi...原创 2020-01-20 20:31:15 · 283 阅读 · 0 评论 -
(dijkstra)洛谷 P4779 【模板】单源最短路径(标准版)
一、算法分析从题意上来看,就是求单源最短路径,标准版考虑用dijkstra来做,要用堆优化,也就是优先队列优化。二、代码及注释代码是紫书上的dijkstra模板,自己写了一些注释,配合自己画图的话还是很好理解的。#include<iostream>#include<cstring>#include<cstdio>#include<vector...原创 2019-12-26 16:08:12 · 195 阅读 · 0 评论