![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SPFA/Dijkstra
Jerry99s
OI -> ACM -> AI
展开
-
SPFA
粗略讲讲SPFA算法的原理是一种求单源最短路的算法算法中需要用到的主要变量int n; //表示n个点,从1到n标号int s,t; //s为源点,t为终点int d[N]; //d[i]表示源点s到点i的最短路int p[N]; //记录路径(或者说记录前驱)queue q; //一个队列,用STL实现,当然可有手打队列,无所谓转载 2015-08-25 15:09:49 · 354 阅读 · 0 评论 -
HDU6386 Age of Moyu (2018多校第七场1001) (建虚点+堆优化dijkstra)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6386题意: n个点m条边,每个边上有一个编号; 从一个编号走到另一个编号,需要代价1; 求1到n的最小代价;分析: 首先dfs: 对于连通的同一编号的边所连接的点,建立一条边权为1的指向一个虚点的边,同时建立边权为0的由此虚点指向这些点的边; 然后dijk;复杂度O(m) (雾 ...原创 2018-08-14 11:36:15 · 456 阅读 · 0 评论 -
Codeforces Edu#40 D. Fight Against Traffic
题目:http://codeforces.com/contest/954/problem/D题意: 起点s,终点t,求有多少种加边方案,使得两点最短路不变短; 已经有边直接相连的点不能再加边。分析: s、t为起点两遍spfa; O(n^2)枚举加边,不变短ans++。代码:#include <bits/stdc++.h>using namespace st...原创 2018-03-22 22:36:23 · 442 阅读 · 0 评论 -
HDU5521 Meeting
题目: 给一些集合,集合里的任意两点可以花费某一时间ti到达 有两人分别在1号点和n号点 两人同时出发,问在哪一点见面花费的时间最短 输出最短时间和见面的点(如果有多个点从小到大输出多个) 分析: 1、对于一个集合,建一个超级汇点,所有集合内的点建一条指向汇点的权值为0的边,汇点向集合内各点建一条权值为ti的边(这样集合内任意两点就可以通过汇点花费ti到达) 2、由1为源点一遍spfa原创 2017-10-03 21:31:56 · 201 阅读 · 0 评论 -
17ACM Asia Shenyang 1008 transaction
题目:HDU 6201 分析: 法一:树形DP,递归形式DP比较好写,不过我RE了= - ☆法二:建一个虚拟节点,与每一个点连接,边权值为每一个点的价格; 用spfa求从虚拟节点到每一个节点的最短路f[i]; 则答案为max{price[i]-f[i]}; 复杂度为O(m+n); 代码:#include <cstdio>#include <algorithm>#include原创 2017-09-13 22:22:06 · 178 阅读 · 0 评论 -
洛谷2656 采蘑菇
题目:http://www.luogu.org/problem/show?pid=2656# 分析:由于可以走多次,so可以tarjan缩点+spfa。 代码:#include <cstdio>#include <algorithm>#include <cstring>#include <vector>#include <stack>#include <queue>using nam原创 2015-10-25 10:52:05 · 386 阅读 · 0 评论 -
APIO2009 ATM
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1179 分析:可以走多次,于是一个强连通分量内的都可以拿走。所以tarjan+spfa. 代码:#include <cstdio>#include <algorithm>#include <cstring>#include <vector>#include <stack>#inclu原创 2015-10-24 21:31:17 · 433 阅读 · 0 评论 -
NOIP2009 最优贸易
题目:http://www.luogu.org/problem/show?pid=1073# 分析:两次spfa, 第一次spfa从起点开始,算出到达每个点i时的最小买入价in[i] 第二次spfa把所有边反向,终点开始spfa,算出到达每个点i时的最大卖出价out[i] ans=max(out[i]-in[i]),1<=i<=n; 然而一开始想到一个O(log(100)*n+n)的算法,原创 2015-10-20 19:08:21 · 521 阅读 · 0 评论 -
POJ1511 Invitation Cards
题目:http://poj.org/problem?id=1511 分析:spfa,再把边反向spfa 代码:#include <cstdio>#include <algorithm>#include <cstring>#include <vector>#include <queue>using namespace std;const int Tmax=1000005,inf=214原创 2015-10-19 21:10:57 · 496 阅读 · 3 评论 -
HDU 6582. Path (Dijkstra+Dinic)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=6582题意:给定一张有向图,n个点,m条边;可以砍掉一些边,砍掉每条边的代价是边的权值;问最少花费多少,能使得从1到n的最短路长度至少增加1,不连通也算长度增加。输出最少花费。分析:1.总体思路由于从1到n的最短路可能存在多条,所以需要先把所有最短路上的边拎出来建一张图G;然后在图G上跑...原创 2019-07-22 22:48:45 · 868 阅读 · 3 评论