图论——最短路
文章平均质量分 80
XDU_Skyline
Everything is over, everything is just beginning.
展开
-
习题7-1 消防车 UVa208
1.题目描述:点击打开链接2.解题思路:本题让按照字典序来枚举从1到k的所有路径,结点不能重复经过;类似于枚举全排列,不过事先要判断1到k是否联通,否则会TLE,判断连通的方法据说是Floyd算法(队友告诉我的,一种找两点间接有联系的有效算法),之前我试着用dfs找1到k能否连通,但我写的算法自身有致命缺陷,还是通过对拍才找到的。。。这道题不太难,但我在判断1到k是否连通这个地方花费了很多原创 2015-02-04 11:27:05 · 1355 阅读 · 0 评论 -
例题11-5 噪音恐惧症 UVa10048
1.题目描述:点击打开链接2.解题思路:本题的解题过程类似于Floyd算法的原理,即:任意一条长度大于1的路径,一定存在一个中间点k,使得d(i,j)=d(i,k)+d(k,j),其中d(i,j)表示(i,j)的最短长度,对于不同的点k,d(i,k)+d(k,j)可能不相同,因此最后要取最小值。对于本题,即max(d[i][k],d[k][j])可能不同,因此最后要取最小值。所以,只需要把Fl原创 2015-03-04 22:30:23 · 1153 阅读 · 0 评论 -
例题11-4 电话圈 UVa247
1.题目描述:点击打开链接2.解题思路:本题要求寻找电话圈:圈内的人两两均直接或间接地通过电话。这正是Floyd算法的用武之地。先用Floyd算法求出传递闭包。然后扫描所有人,将处在一个圈里的人标记并放入数组,随后输出即可。3.代码:#include#include#include#include#include#include#include#include#incl原创 2015-03-04 20:43:11 · 636 阅读 · 0 评论 -
例题11-6 这不是bug,而是特性 UVa658
1.题目描述:点击打开链接2.解题思路:本题要求找最短的时间,乍一看想用动态规划解决,但可惜这种做法是行不通的,因为状态经过多次转移之后可能会回到原先的状态,即状态图不是DAG。因此联想到用图论上的最短路算法来解决。先把每个状态都看成一个结点,然后用Dijkstra算法解决即可,不过本题与普通的最短路问题略有不同:结点很多,多达2^n个,而且很多状态根本遇不到。所以没必要先把图储存好。(一般的原创 2015-03-07 15:51:06 · 983 阅读 · 0 评论 -
POJ 3255 Roadblocks
1.题目描述:点击打开链接2.解题思路:本题利用Dijkstra算法的原理解决。由于要求出次短路,我们需要思考Dijkstra成功求解出最短路的原理,然后再加以改进。Dijkstra算法的原理是先把所有距离设为INF,然后令dist[0]=0。每次都从已经确定了距离的顶点出发,依次更新跟它相邻的结点的最短距离,以后就不再考虑“最短距离已经确定了的顶点”。注意:我们不用考虑的是“最短距离已经原创 2015-04-07 16:16:03 · 1171 阅读 · 0 评论 -
例题5.11 机场快线 UVa11374
1.题目描述:点击打开链接2.解题思路:本题利用最短路求解。因为商业线只有一站,因此我们希望枚举所有可能情况,然后看哪一种是最优方案。此时可以考虑先用Dijkstra算法求出从起点出发的最短路d1,和从终点出发的最短路d2。即d1[i]表示从起点走到i的最短路,d2[i]表示从i走到终点的最短路,设当前的商业线起点为a,终点为b,时间为T(a,b),那么总时间就是d1[a]+T(a,b)+d2原创 2015-10-02 15:16:24 · 441 阅读 · 0 评论 -
例题5.16 Halum操作 UVa11478
1.题目描述:点击打开链接2.解题思路:本题利用BellmanFord算法+二分解决。本题要求执行完一系列Halum操作后,可以让边权的最小值非负且尽量大。自然想到可以用二分法来解决。假设答案是x。即问题转化为所有边的边权经过操作后都大于等于x。然而这里有一个问题,我们根本不知道应该怎么选取相应的v,d,使得可以达到这个目标。但是仔细观察后就可以注意到一个特点:不同的操作影响是相互独立的,即影原创 2015-10-02 23:09:37 · 352 阅读 · 0 评论 -
POJ 3662 Telephone Lines
1.题目描述:点击打开链接2.解题思路:本题利用二分法+Dijkstra算法解决。根据题意,可以枚举所需费用为x,接下来用Dijkstra算法求出在费用为x时候的最短路。不过这个时候的路径长度并不是实际路径长度,当路径长度>x时候,当做1,否则当做0,这样,d[n-1]实际是大于x的最少的路径数目。如果这个数目大于k,那么无解,否则有解。3.代码:#include#include#原创 2015-10-03 20:00:19 · 585 阅读 · 0 评论 -
例题5.13 战争和物流 LA4080
1.题目描述:点击打开链接2.解题思路:本题要求计算每对结点的最短路长度之和,以及删除一条边后最大的c值。前者直接用Dijkstra算法即可得到。问题是如何高效求解后者。这里可以利用最短路树来求解。可以证明,如果删除的边不在最短路树上,那么最短路树上的边到源点的最短路是不变的。如果是最短路树上的边,就需要重新求解最短路,并累计和。对于每个源点,只需要求解n次单源最短路,因此总的时间复杂度为O(原创 2015-10-04 00:25:19 · 588 阅读 · 0 评论