1.建⽴⼀个队列,初始时队列⾥只有起始点,再建⽴⼀个表格记录起始点到所有点的最短路径(该表格的初始值要赋为极⼤值,该点到他本
⾝的路径赋为 无穷大)。然后执⾏松弛操作,⽤队列⾥有的点作为起始点去刷新到所有点的最短路,如果刷新成功且被刷新点不在队列中则把
该点加⼊到队列最后。重复执⾏直到队列为空。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxx=1005;
const int inf=0x3f3f3f3f;
vector<int>G[maxx];
queue<int>q;
int dist[maxx];
int e[maxx][maxx];
int pre[maxx];
int vis[maxx];
int n,m,k;
void SPFA_min(int u){memset(dist,inf,sizeof(dist));q.push(u);vis[u]=1;dist[u]=0; while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=0;i<G[u].size();i++){int v=G[u][i];if(dist[v]>dist[u]+e[u][v]){dist[v]=dist[u]+e[u][v];pre[v]=u;if(vis[v]==0){q.push(v);vis[v]=1;}}}}
}
int main(){while(scanf("%d %d %d",&n,&m,&k)!=EOF){memset(pre,0,sizeof(pre));memset(vis,0,sizeof(vis));for(int i=1;i<=105;i++){G[i].clear();}while(!q.empty()){q.pop();}memset(e,inf,sizeof(e));for(int i=1;i<=n;i++){int a,b,cost;scanf("%d %d %d",&a,&b,&cost);G[b].push_back(a);G[a].push_back(b);if(e[a][b]>cost){e[a][b]=e[b][a]=cost;}}int t[maxx];int d[maxx];for(int i=1;i<=m;i++){cin>>t[i];}for(int i=1;i<=k;i++){cin>>d[i];}int mincost=inf;for(int i=1;i<=m;i++){SPFA_min(t[i]);for(int j=1;j<=k;j++){mincost=min(mincost,dist[d[j]]);}}cout<<mincost<<endl;}return 0;
}

HDU2066(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. 人工智能应用于建筑领域新前沿
  2. Ubuntu12.04下解决sudo apt-get update警告Duplicate sources.list entry
  3. 个人数据上云怎么办?树莓派+kodexplorer为你造云
  4. 李彦宏被泼水,是“多数人的暴力”还是“群众的宣泄”
  5. DNN深度神经网络、RBM受限玻尔兹曼机、DBN深度置信网络
  6. git bash提交代码步骤
  7. cutftp连接server-U中文乱码问题解决
  8. excel怎么把竖排变成横排_衣服如此凌乱?怎么能忍受的了?衣柜收纳,试试这些神器吧...
  9. 超过2t硬盘分区_大于2T的磁盘怎么分区呢?
  10. Swift --- 下标(subscript)
  11. browserquest php安装,H5多人联机网游《Browserquest》源码 node.js版本+php版本
  12. 独家发布!java总结与心得,下载量瞬秒百万
  13. 开源项目之freepy自由输入法
  14. JS 调用打印机,打印HTML中的部分内容
  15. 计算机网络有很多用处,计算机网络的概念、基本组成和用途
  16. 20175227张雪莹 2018-2019-2 《Java程序设计》第四周学习总结
  17. 牛客练习赛22 E 树状数组 + DFS + 拓展欧几里德定理
  18. 如何设置IIS中的HTTPS服务
  19. 【自考必看】《信息资源管理基础》信息资源管理基础,第1章,速通指南
  20. ubuntu 百度云上传文件

热门文章

  1. MySQL数据库介绍、安装(服务端软件安装、客户端软件安装(图形化界面客户端和命令行客户端))
  2. spring boot初学习的数据库依赖
  3. OSI第一层:物理层功能及作用(详解与解释)
  4. 收藏 | 多目标跟踪(MOT)入门
  5. 43.6% mAP! 阿里巴巴提出:用于一阶段目标检测的半锚式检测器
  6. 分布式事物-2pc和3pc区别
  7. squid与varnish
  8. 虚拟化云计算平台Proxmox VE
  9. FBI很气愤:黑了CIA的熊孩子又回来了
  10. Java的上溯、下溯