最短路
文章平均质量分 84
满赋诸机
这个作者很懒,什么都没留下…
展开
-
HDU-3790 最短路径问题 (Dijkstra)
裸的最短路,用Dijkstra和优先队列,只需要修改结构体和比较函数即可注意:当距离相等时,输出花费最小的,开始没看到。。。原创 2016-04-30 13:13:00 · 457 阅读 · 0 评论 -
USACO-Section 3.2 Sweet Butter(最短路[Dijkstra])
由于点是800个,所以只能用优化过的Dijkstra算法复习时又看到 Johnson算法 可以解决 稀疏图的 全源最短路,但是比较麻烦,需要重新构图原创 2016-03-26 16:03:02 · 471 阅读 · 0 评论 -
USACO-Section 3.3 Camelot (最短路&&枚举)
最开始没注意到有国王,就想到直接先用BFS处理出任意两点间的“最短路”,然后枚举终点即可,复杂度是O(n*m)后来发现有国王,还是往枚举的方向想,可以枚举搭载国王的骑士,再枚举搭载国王的点,复杂度O((n*m)^3),估计很容易就超时,加了点剪枝,最慢的点0.85s,应该是服务器好,险过官方是对每一点处理出两个值:①骑士到该点最短路,②骑士搭载王到该点的最短路,这样最慢的点0.4s也有大神用dp过,不过看不懂...原创 2016-03-29 12:56:40 · 677 阅读 · 0 评论 -
USACO-Section 2.4 Bessie Come Home(最短路[Dijkstra])
从Z点开始,开始更新各点到Z点的最短距离,第一个距离Z点最短并且未用的点如果存在奶牛,则其即为答案原创 2016-01-30 15:45:52 · 628 阅读 · 0 评论 -
POJ-3114 Countries in War (强连通分量[Tarjan]&&Dijkstra)
由于互相可达的点是0花费,所以将强连通分量缩成一个点,就变成一道裸的最短路,再跑一边Dijkstra即可原创 2016-04-26 14:16:44 · 604 阅读 · 0 评论 -
HDU-4568 Hunter (Dijkstra&&状压DP)
先做的hdu-4571感觉和那题差不多,都需要先处理出任意两点的最短路,不过本题少了一个限制,所以dfs是结局不了的,然后就不会了...看了题解后,发现必经点少,可以进行状态压缩储存已经过的点,就想到以前做过更相似的题(hdu-5418),才发现这都是TSP问题为了方便,增加虚拟的开始与终止节点,不过这样会增加很大的常数手快打错了,导致又浪费好处时间。真是 脑抽1秒钟,调试n小时。原创 2016-04-01 10:35:59 · 640 阅读 · 0 评论 -
POJ-1062 昂贵的聘礼(Bellman-Ford)
完全忘了Bellman-Ford和SPFA了,只会Dijkstra和Floyd...赶紧复习一下Bellman-Ford貌似就是单源版的Floyd,还是挺简单的...本题点权只在最短路算完时才算入,所以直接算最短路即可,不过需要注意:这题有在一条最短路上的任意两点的等级差距不大于m原创 2016-05-07 10:05:42 · 643 阅读 · 0 评论 -
POJ-3259 Wormholes(负权回路[Bellman-Ford])
只以1号点为源点做Bellman-Ford即可判断图中是否存在负权回路(该负权回路不一定以1号点为起点)例如:13 0 22 3 13 2 1这组数据会输出YES调试时能发现,dis[2],dis[3]每次都在更新,但是是在INF的基础上更新,所以要判断1号点是否可打2,3时,要判断dis[2],dis[3]是否 大于 图中的最大权值和才行原创 2016-05-07 11:42:34 · 849 阅读 · 0 评论 -
POJ-1860 Currency Exchange(Bellman-Ford)
由于本题是要求走一圈后,权值变大,所以更改Bellman-Ford的初始条件和更新条件,即可更改为求已s为起点的“最长路”,因为更新方法变了,所以每次能更新到的点必定是s点可达的点,即也再可兑换回s,所以只要用Bellman-Ford判断是否有“负权回路”即可关于讨论版后的数据:45 43 8 32.46000040 6 90.90 17.59 45.28 89.7029 18 37.97 55.13 84.48 52.8145 26 59.25 99.43 27.79 90.847 42 5原创 2016-05-07 13:10:08 · 770 阅读 · 0 评论 -
USACO-Section 2.4 Cow Tours(最短路[Floyd])
题意开始有点没看到,就看看别人的理解,结果解法一直在大脑挥之不去由于只用添加(i,j)一条路,所以这两个牧场连成的片区的直径如果大于i和j所在牧场的直径,则其直径为dis[i]+dis[j]+distance(i,j)【其中dis[i]表示在其所在牧场中,与i最远的距离,distance(i,j)表示i,j两点距离,即添加的路的距离】;否则其直径为i和j所在牧场的直径的较大值原创 2016-01-30 13:29:51 · 477 阅读 · 0 评论 -
HDU-4370 0 or 1(最短路[Dijkstra])
尽管放在最短路专题中,但还是想不到怎么用最短路做,果真是我太渣了么下面是官方题解:显然,题目给的是一个0/1规划模型。解题的关键在于如何看出这个模型的本质。3个条件明显在刻画未知数之间的关系,从图论的角度思考问题,容易得到下面3个结论:1.X12+X13+...X1n=1 于是1号节点的出度为12..X1n+X2n+...Xn-1n=1 于是n号节点的入度为13.∑Xki =∑Xij 于是2~n-1号节点的入度必须等于出度原创 2015-08-18 11:57:46 · 742 阅读 · 0 评论 -
HDU-1385 Minimum Transport Cost(最短路[Dijkstra])
除了边有权值,点也有权值,一开始没想到能用什么方法,看了讨论版后,发现用Dijkstra的话,每个节点至多只经过一次,所以用Dijkstra几乎不会变太多原创 2015-08-15 13:27:54 · 481 阅读 · 0 评论 -
POJ-2253 Frogger (最短路)
可以按照Dijkstra的思想,设dis[i]表示从1到i点的所有路径中,最长边最小的长度,每次不更新最短路,只更新1~i的路径上最长边最小的长度即可【注意】POJ中,double在G++下需要用%f输出,又被坑了好久。。。原创 2016-05-01 19:30:48 · 428 阅读 · 0 评论 -
HDU-2680 Choose the best route(最短路[Dijkstra])
第一道用优先队列写的最短路题。受到前几题的影响,没仔细读题,认为是无向边,WA后重看发现是有向边,改过后就AC由于起点Kiki附近的公交车站有很多,而Kiki's friend附近的公交车站只有一个,所以将所有的有向边转向,即可将单目标最短路转换为单源最短路,然后裸敲Dijkstra模版即可原创 2015-08-12 15:19:41 · 456 阅读 · 0 评论 -
HDU-1596 find the safest road(最短路[Dijkstra])
看到有求任意两点间的距离,认为Dijkstra算法会超时,想到用floyd算法,但是还没有看具体实现,便接着去学习,苦于强迫症,先看了Bellman-ford算法,听到同学说能用Dijkstra算法,便立刻回来写了,1次AC的感觉真爽原创 2015-08-12 23:45:24 · 821 阅读 · 0 评论 -
HDU-1690 Bus System(最短路[Dijkstra])
这道题和hdu1596 find the safest road类似,做法也差不多,只不过需要自己求边的权值。又是1次AC,虽然写的慢,但想的比较全面。做完这些比较简单的最短路题后,已经基本熟悉Dijkstra的邻接表做法原创 2015-08-13 11:39:10 · 377 阅读 · 0 评论 -
HDU-1548 A strange lift(最短路[Spfa || BFS])
第一眼看就知道应该要搜索,要不是放在最短路专题,还真想不到用图论做,简单题,刚好练习一下Spfa(看到Spfa时间效率不是很稳定,还是多用Dijkstra的好)BFS占用内存少,运行快,代码少,如果是无权图还是用BFS写更好BFS:原创 2015-08-13 23:34:47 · 532 阅读 · 0 评论 -
HDU-2066 一个人的旅行(最短路[Floyd])
第一道floyd算法写的最短路,看到同学用SPFA写的0ms代码,终于深刻体会到floyd的时间复杂度需要继续努力学习更多算法原创 2015-08-13 16:44:58 · 476 阅读 · 0 评论 -
HDU-2112 HDU Today(最短路[Dijkstra])
第一道最短路题,竟然用字符串代表节点,用map映射后裸敲模版先熟悉一下代码学习的时候只看了优先队列的做法,邻接表的方法还需理解注意:使用map时,如果if(mp[fin]==0) 后就不能用mp.insert(...);因为if条件句中已经调用过mp[fin],如果mp[fin]不存在就会创建一个mp[fin],值为默认值,insert()函数会被(忽略?),所以需要直接更改值或者使用if(mp.find(fin)==mp.end()) 判断,然后用mp.insert(...)。原创 2015-08-12 00:25:26 · 372 阅读 · 0 评论 -
HDU-2433 Travel(最短路[Dijkstra])
题目大意:多组输入,每组第一行读入定点数n和边数m,接下来m行是边。输出1~m条边分别摧毁后任意两点(分起点终点)的最短距离和,如果存在两点不连通,则INF由于边数多,如果每次都计算任意两点的距离会超时。看到大神的思路后,注意到每次只删除一条边,如果这条边在某两点(u,v)的最短路径中,则u,v两点的最短路长度会变,其他不变但是太懒了,不想记录路径,又看到很多人直接只算(u,v)的最短路,然后减去原来u,v的最短路*2,加上最新的最短路*2就是答案,但这样的代码居然能AC,数据真是好水例如这组数据原创 2015-08-14 16:14:09 · 679 阅读 · 0 评论 -
2016年 团体程序设计天梯赛 - 初赛
L1-1 到底有多二 模拟L1-2 大笨钟 模拟L1-3 谁先倒L1-4 帅到没朋友 标记L1-5 重要的话说三遍 模拟L1-6 奇偶分家 模拟L1-7 输出GPLT 标记L1-8 后天 模拟L2-1 抢红包 模拟L2-2 排座位 并查集L2-3 玩转二叉树 分治L2-4 关于堆的判断 小根堆L3-1 天梯地图 最短路 DijkstraL3-2 喊山 BFS原创 2016-06-04 16:07:56 · 17284 阅读 · 1 评论