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

线路的规划方式是,每一次往返(即在同一站开始和结束的旅程)通过一个中央检查站站(CCS),每个乘客必须通过包括身体扫描在内的彻底检查。
每天支付志愿者旅行费用的最低金额。
由题意可知,最低金额的计算规则是:首先是单源点到其他点之间的最低费用之和sum1;然后是其他点到单源点之间的最低费用之和sum2。两个费用之和才是最后的志愿者旅行费用的最低金额。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<cstdio>
using namespace std;
typedef long long ll;
const int maxx=1000005;
const int inf=0x3f3f3f3f;
struct node{int u,v,w;int next;
}num[maxx];
struct V{int u,v,w;
}TV[maxx];
queue<int>q;
int dist[maxx];
int pre[maxx];
int vis[maxx];
int n,m,k;
int cnt;
int head[maxx];
void add(int u,int v,int w){num[cnt].v=v;num[cnt].next=head[u];num[cnt].w=w;head[u]=cnt++;
}
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=head[u];i!=-1;i=num[i].next){int v=num[i].v;if(dist[v]>dist[u]+num[i].w){dist[v]=dist[u]+num[i].w;pre[v]=u;if(vis[v]==0){q.push(v);vis[v]=1;}}}}
}
void init(int n){cnt=1;memset(vis,0,sizeof(vis));memset(pre,0,sizeof(pre));memset(head,-1,sizeof(head));while(!q.empty()){q.pop();}
}
int main(){int t;scanf("%d",&t);while(t--){scanf("%d %d",&n,&m);init(n);for(int i=1;i<=m;i++){int a,b,cost;scanf("%d %d %d",&a,&b,&cost);TV[i].u=a;TV[i].v=b;TV[i].w=cost;add(a,b,cost);}ll mincost=0;SPFA_min(1);for(int i=1;i<=n;i++){mincost+=dist[i];}init(n);for(int i=1;i<=m;i++){add(TV[i].v,TV[i].u,TV[i].w);}SPFA_min(1);for(int i=1;i<=n;i++){mincost+=dist[i];}cout<<mincost<<endl;}return 0;
}

poj1511(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. 3. 5种常见卷积论文、解读、使用方法、实现代码整理(conv)
  2. Puppet扩展篇1-自定义fact结合ENC(hirea)的应用实践
  3. 链表问题20——按照左右半区的方式重新组合单链表
  4. 商城开发(1)-前期准备
  5. 获取Json中特定的值
  6. 牛客网_PAT乙级_1017打印沙漏(20)
  7. U-GAT-IT 论文阅读
  8. java 苹果h5不能播放_H5音频不能自动播放的问题
  9. odoo10参考系列--网络控制器(Web Controllers)
  10. MATLAB simulink 2FSK调制与解调实验,附仿真文件(西电B测)
  11. 统计软件测试应用,应用统计过程控制监控软件测试过程.PDF
  12. vue 局部回到顶部_VUE回到顶部功能
  13. Cisco Packet Tracer入门--三层交换机局域网搭建教程
  14. web-登陆界面html-数据库
  15. 人民币转大写 java_把数字转换成人民币大写的形式
  16. 编程向未来---启程
  17. CentOS 7.4安装配置Oracle 12cR2 12.2.0.1.0
  18. 【转】canvas初探
  19. ctrl+alt+t 函数注释快捷键失效KoroFileHeader
  20. 跳一跳,python脚本原理

热门文章

  1. Python之Scrapy爬虫的常用命令
  2. 静态路由和默认路由的区别
  3. Opencv实现透视形变
  4. 动手推导Self-Attention
  5. 【OpenCV 4开发详解】均值滤波
  6. 草根seo站长利用网站赚钱的方法
  7. MySQL 里的 Timestrap 和 DateTime 和 Java 中的 Date
  8. FineReport中如何用JavaScript自定义地图标签
  9. 通过yiic来创建yii应用
  10. 改变从内部开始:开发者与管理者的协作