【ACM】那些年,我们挖(WA)过的最短路
不定时更新博客,该博客仅仅是一篇关于最短路的题集,题目顺序随机。
算法思想什么的,我就随便说(复)说(制)咯:
Dijkstra算法:以起始点为中心向外层层扩展,直到扩展到终点为止。有贪心的意思。
大部分题用Dij+队列优化都能解决。。但有负权边不行哦。
Bellman-Ford:反复对边集E中的每条边进行松弛操作。
求含负权图(有负环输出错误提示)的单源最短路径,效率很低,至于对多余松弛的优化就是设置个标记,还是很慢,不如写SPFA。
判断负环:在每次松弛时把每条边都更新一下,若在n-1次松弛后还能更新,则说明图中有负环。
SPFA算法:在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。
好了,刷题刷题。。。
poj 2391 Til the Cows Come Home【dij裸题】 :求N到1的距离,双向图,有重边。【论入门的快乐,喵】
poj 2253 Frogger【变种dij】 :求一种从点1到点2的跳跃方案,使得一次跳跃的最大值尽量小,求最大边。将d[i]的意义变为从1到i的最大边,然后贪心思想。
poj 1797 Heavy Transportation【变种dij】:求最大的最小边权值,和上一题差不多。。或者,写prim。
poj 3268 Silver Cow Party【dij】:往返的最短路,边要再反建一次。
poj 1860 Currency Exchange【Bellman-Ford或 SPFA 判断是否有正环】 裸 题。
poj 3259 Wormholes【Bellman-Ford或 SPFA判断是否有负环】 :这题数据弱,从1点开始走就能AC,但题没说是连通的哇。。。从各个点走,应为正确解法。或者,加个超级源点,连通一下。
poj 1502 MPI Maelstrom【dij裸题】 :好像这是第一次知道了这个函数atoi(s)
poj 3660 Cow Contest【floyd】 :给出牛之间的强弱关系,让你确定有多少头牛能够确定其排名。 用floyd去连边,然后点的出入度和为n-1就能确定该点排名。
poj 2240 Arbitrage 【floyd】:求自身到自身的最大转换率(求N种货币中是否有货币可以经过若干次兑换后,兑换成原来的货币可以使货币量增加)。 floyd求最大环。
poj 1511 Invitation Cards【SPFA】 :还是往返的最短路,边反建。。数据大,用邻接表存储。
poj 3159 Candies【差分约束+dij】:裸的差分约束。b比a多的糖果数目不超过c个,即d[b] – d[a] <= c,连边a->b。
hdu 5876 Sparse Graph【补图最短路bfs】:开两个set,一个放不邻接的点,一个放未扩展的点,更新一轮不邻接点的最短路后,将两集合交换,并清空未扩展点集合。
poj1122 FDNY to the Rescue!【dij+反向建图+输出路径】 :反向建图,从火警位置求一次最短路,求最短路时记录路径,按时间从小到大输出。
51nod 1445 变色DNA【dij】:其实,看出是最短路就是裸题了、、
POJ 2391 Ombrophobic Bovines【floyd+二分+最大流】:好像重点不在最短路了?二分答案,利用floyd求出的最短路建s-t割。
ZOJ2760 【floyd+最大流】:听说对角线上的数据不一定为0,数据坑?233
hdu 5669 Road【线段树+分层图+最短路】:裸的线段树、裸的分层图、裸的最短路。我最喜欢的题之一,喵喵喵?
CodeForces 787D. Legacy【线段树+最短路】 :把上面那题复制一下,化简一下,就,完事啦......
hdu 5521 Meeting(dij+拆点):边太多了,给每个团加两个点,将团内点与该两点连边,减小建边数量,再进行两次dij。
BZOJ4152: [AMPPZ2014]The Captain【dij裸题】:xy排序后跑最短路。
BZOJ4289: PA2012 Tax(dij+技巧建图):真的是很神奇的一道题。化边为点,差值建边。[突然变咸.jpg]
hdu 5361In Touch(dij+并查集):用并查集优化,直接访问下个未访问点。
BZOJ2143: 飞飞侠 【分层图+最短路】:这题输入数据是反的233。边太多,不好写?写分层图吖(有装置就花钱直接飞到它能弹射距离的高度,往四周走就相当于走楼梯往下走一台阶,走到底层就不能走了,或者走到其他有装置的地方,又可以飞升了)、、还可以降个维再用并查集优化,能跑的更快,OTZ。
BZOJ2007 : [Noi2010]海拔(对偶图+最短路):把原图转换成对偶图,东北为起点,西南为终点,跑最短路。
UVALive - 4223(二分+最短路):二分高度,然后就是裸的最短路:)