1.建⽴⼀个队列,初始时队列⾥只有起始点,再建⽴⼀个表格记录起始点到所有点的最短路径(该表格的初始值要赋为极⼤值,该点到他本
⾝的路径赋为 无穷大)。然后执⾏松弛操作,⽤队列⾥有的点作为起始点去刷新到所有点的最短路,如果刷新成功且被刷新点不在队列中则把
该点加⼊到队列最后。重复执⾏直到队列为空。
判断有⽆负环:如果某个点进⼊队列的次数超过 N 次则存在负环(SPFA ⽆法处理带负环的图)

#include <iostream>
#include <cstdio>
#include <cstring>
#include<algorithm>
#define max0 999999
using namespace std;
const int maxn=1005;
const int inf=0x3f3f3f3f;
int dist[maxn];
int vis[maxn];
int q[maxn];
int e[maxn][maxn];
int head,tail;
void SPFA_min(int s,int n){memset(q,0,sizeof(q));memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)dist[i]=inf;dist[s]=0;q[1]=s;head=0,tail=1;vis[s]=1;while(head!=tail){int v=q[++head];vis[v]=0;for(int i=1;i<=n;i++){if(e[v][i]!=inf){if(dist[i]>dist[v]+e[v][i]){dist[i]=dist[v]+e[v][i];if(vis[i]==0){q[++tail]=i;vis[i]=1;}}}}}
}int main(){int n,m,s;while(~scanf("%d%d%d",&n,&m,&s)){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i!=j)e[i][j]= inf;else e[i][j]=0;}}for(int i=0;i<m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(c<e[b][a])e[b][a]=c;}SPFA_min(s,n);int w,mincost=inf;scanf("%d",&w);while(w--){int p;scanf("%d",&p);mincost=min(mincost,dist[p]);}if(mincost==inf)printf("-1\n");else printf("%d\n",mincost);}return 0;
}

HDU2680(SPFA算法)相关推荐

  1. poj 3662 Telephone Lines spfa算法灵活运用

    意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...

  2. 图论-最短路径--3、SPFA算法O(kE)

    SPFA算法O(kE) 主要思想是:     初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将其入队.直到队列为空时算法结束.     这个算 ...

  3. HDU3440(差分约束+SPFA算法)

    题意:两栋房子之间的最大距离为D,也就是A-B<=D,现在求出最矮和最高房子之间的最大距离 思路:差分约束+SPFA算法: 当问题可以转化为形如一组 xi‑x'i<=yi 或一组 xi‑x ...

  4. poj2387(SPFA算法)

    1.建⽴⼀个队列,初始时队列⾥只有起始点,再建⽴⼀个表格记录起始点到所有点的最短路径(该表格的初始值要赋为极⼤值,该点到他本⾝的路径赋为 无穷大).然后执⾏松弛操作,⽤队列⾥有的点作为起始点去刷新到所 ...

  5. 图论刷水题记录(二)(最短路-----SPFA算法)

    继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...

  6. SPFA算法O(kE)

    SPFA算法O(kE) Dijkstra和Floyed是不断的试点.Dijkstra试最优点,Floyed试所有点. Bellman-Ford和SPFA是不断的试边.Bellman-Ford是盲目的试 ...

  7. (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法

    一.floyd 1.介绍 floyd算法只有五行代码,代码简单,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3),可以求多源最短路问题. 2.思想: Floyd算法的基本思想如下:从任意 ...

  8. 最短路径:Dijkstra、BellmanFord以及SPFA算法

    最短路径问题 1.Dijkstra算法 简介 (1)Dijkstra算法伪代码 (2)C++ 邻接表版代码 (3)优化 (4)题型分析 2.Bellman Ford算法 简介 (1)Bellman算法 ...

  9. 最短路径(Dijkstra、Bellman-Ford和SPFA算法)

    最短路径(Dijkstra.Bellman-Ford和SPFA算法) 前言 图的存储方式 邻接矩阵 邻接表 链表建立 利用vector 结构体 核心思路 Dijkstra算法 图解 基本思想 求解步骤 ...

  10. HDU SPFA算法 Invitation Cards

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1535 分析: 题意:求1点到其它点的最短距离之和+其它点到1点的最短距离之和 前面一部分直接用SPFA ...

最新文章

  1. android app文档,android App项目需求描述文档.docx
  2. Android 动态刷新listview中的数据
  3. 实现简约不简单的vuex
  4. python编译文件瘦身_python优化、编译文件
  5. YAML 学习笔记 .yml
  6. sql server 当月天数
  7. 数字蝶变,离不开云原生“苍穹”
  8. 谷歌编译器收藏网站在哪打开
  9. 雅虎扫描用户电子邮件,欧盟不干了:侵犯隐私!
  10. router单页面多个标签tags的用法router-view/router-view
  11. 胶东机场t1离哪个停车场近,青岛胶东国际机场停车场攻略
  12. 二维空间:点到直线距离的计算
  13. JavaScript页面刷新的所有方法
  14. Go语言优秀的Revel开源框架推荐
  15. Allegro PCB的5种形状Symbol类型
  16. 通过/proc/net/dev文件来网卡流量进行监控,统计
  17. 做程序员需要什么基础?自学编程难度有多大?初级程序员的工资?程序员要学
  18. 科技圈患上算法专利的“卡脖子PTSD”综合症
  19. 设计师常用的三维制图软件有哪些
  20. 医惠护理系统服务器错误,医惠移动护理信息系统标准接口文档

热门文章

  1. 什么是“单播”“组播”和“多播”
  2. 深度学习100问:什么是深监督(Deep Supervision)?
  3. 实例分割最新最全面综述:从Mask R-CNN到BlendMask
  4. 《机器学习》、《算法数据结构》、《LeetCode原创题解》开放下载!
  5. 如何看待计算机视觉未来的走向?
  6. 深度学习中的图像分割:方法和应用
  7. 【直播回顾】蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程
  8. 台3岁女童疑把玩风枪致死案疑点多 警方将调查厘清
  9. 深入理解Kafka Connect:转换器和序列化
  10. 接口测试用例测试模板