图论-图-最短路
你迎哥哥
这个作者很懒,什么都没留下…
展开
-
最短路模板
一下模板均已通过HDUOJ 2544程序设计竞赛队空间和时间复杂度要求都很高,所以朴素的Dijkstra算法无论时间还是空间,效率都很低。所以,一般而言,不带负权的用邻接表建图+堆优化的Dijkstra算法带负权的的用邻接表建图+SFPA算法此外,最短路还可以用BFS求,例如边权值都为1的话,就可以用普通队列+BFS求得,边权值不为1,可以用优先队列+BFS求得,这里就不给出实现代原创 2015-03-24 10:17:55 · 947 阅读 · 0 评论 -
HDU 1217 Arbitrage(folyd算法)
题意:给几个国家,然后给这些国家之间的汇率。判断能否通过这些汇率差进行套利交易。Floyd的算法可以求出任意两点间的最短路径,最后比较本国与本国的汇率差,如果大于1,则可以。否则不可以。最短路径,Floyd的算法原理:Floyd-Warshall算法的原理是动态规划。设D(i,j,k)为从i到j的只以集合中的k节点为中间节点的最短路径的长度。若最短路径经过点k,则;D(i,j,原创 2015-08-27 14:43:50 · 663 阅读 · 0 评论 -
HDU 1596 find the safest road(最短路变形)
把到起点的距离初始化为0,起点到起点的初始化为1.把dijstra里的加号改成乘号就OK了。最后再加一句,水题。#include#include#includeusing namespace std;const int maxn=1005,inf=1<<29;int n,m,s,e;int vis[maxn];double d[maxn];double Map[maxn][原创 2015-08-27 15:30:16 · 353 阅读 · 0 评论 -
HDU 1548 A strange lift (简单最短路或BFS)
题意:电梯每层有一个不同的数字,例如第n层有个数字k,那么这一层只能上k层或下k层,但是不能低于一层或高于n层,给定起点与终点,要求出最少要按几次键思路:一开始的想法是搜索,而且搜索也是可行的,不过既然这道题出在了最短路的专题里面,自然也要尝试下最短路的做法,要注意的是,这道题是单向边,我们只要让map里面的值全部为1就可以统计次数了 首先是最短路的Dijkstra#include#原创 2015-08-27 15:17:04 · 409 阅读 · 0 评论 -
1688 Sightseeing(最短路+次短路+计数)
题意:找出从S到F两个点之间的最短路和比最短路长1的次短路的条数之和。分析:最短路很好求,关键是次短路,郁闷呀不过,如果对最短路的更新距离的过程有更深的认识的话,就好办很多了。用一个二维数组记录每一个节点距离起始点的最短距离和次短距离,再开一个二维数组记录路径数更新状态时: 1)新值小于最短路径长:更新最短路径长,计数;次短路径长,计数2)新值等于最短路径长:更新最短路径计原创 2015-08-27 15:49:06 · 596 阅读 · 0 评论 -
HDU 1535 Invitation Cards (最短路 建正反图)
题意:从起点1出发,每个车站安排一个人,然后所有人要从终点回来,问最小花费,是有向图。思路就是建正图和反图但是值得一提的是用G++交会MLE。C++交才会AC,你懂得,杭电时常会来大姨妈。。。用Dijstra和SPFA各种姿势都能AC大家喜欢的Dijstra+堆优化算法来啦#include#include#include#include#define LL long原创 2015-08-27 15:12:25 · 295 阅读 · 0 评论 -
HDU 1142 欢迎参加——每周六晚的BestCoder(有米!) A Walk Through the Forest
题目链接:HDU 1142题目大意:寻找一共有多少条符合题意的路。能够从点A走到点B的要求是:点A到终点的最短路 > 点B到终点的最短路。 也就是说:从终点出发,求每一个点的最短路,然后那些最短路的值记录起来,作为能否通过的判断条件。最后用记忆化搜索来搜索出一共多少条符合要求的路。普通的dfs是超时的,bfs是超内存的。最短路的话用dijstra或SPFA算法随便搞。用dijstra速原创 2015-08-27 14:33:30 · 328 阅读 · 0 评论 -
HDU 1248 漫步校园 (优先队列+BFS求最短路+记忆化搜索)
这题咋一看跟A Walk Through the Forest,这道题差不多。然后就开始想求最短路,到底是用dijstra算法还是spfa算法呢。想破了脑袋都想不出,主要是建图的问题,算法倒不是问题,后面灵光一闪,这种问题我不是可以用BFS+优先队列求最短路的么。。。这才是正解,果断立马AC#include#include#include#define LL long longus原创 2015-08-27 15:03:49 · 403 阅读 · 0 评论 -
HDU 1595 find the longest of the shortest (最短路+记录路径+枚举删边)
本题大意是这样,假设图中某条路径被堵死,它的最坏情况下的最短路径是多少?基本算法就是先求出最短路径,然后假设最短路径中的某一条边被堵死,再求最短路,取这些最短路的最大值即可。算法证明很简单,略。。。需要注意的是,当求最大值时,很有可能会WA,因为求最短法中,dis[N]可能=INF,代表不连通,如果去掉某一条边导致1和N不连通,应不予考虑。样例2提示了我这一点。。。不过最后因为一个小失误还是WA了原创 2015-08-27 15:24:46 · 338 阅读 · 0 评论 -
HDU 1572 下沙小面的(2) (DFS)
然后这道题可以用DFS暴力#includeusing namespace std;const int maxn=35;int vis[maxn],n,k,Map[maxn][maxn],num[maxn],mark[maxn],cnt;int ans;void dfs(int d,int now,int dist){ if(d==cnt) { ans原创 2015-08-27 15:20:32 · 441 阅读 · 0 评论 -
HDU 1385 Minimum Transport Cost(folyd+记录路径)
题意:先给你一张你n * n的图,代表城市间的距离,然后,给出n个tax的费用,然后很多询问,问你a到b的最少费用。。。。并且打印路径(字典序)。。。注意tax的费用起点和终点不算。。。。。开始是算吧起点和终点的费用都算上,最后减掉,这样是不能得到最少费用的。。。。后来想到在三重for里+上tax的费用。。。。就觉得这题完全是为了深刻理解Floyd而出的然后到打印路径,用path[i]原创 2015-08-27 14:57:48 · 294 阅读 · 0 评论