https://www.luogu.org/problem/show?pid=1629

题目描述

有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间。这个邮递员每次只能带一样东西。求送完这N-1样东西并且最终回到邮局最少需要多少时间。

输入输出格式

输入格式:

第一行包括两个整数N和M。

第2到第M+1行,每行三个数字U、V、W,表示从A到B有一条需要W时间的道路。 满足1<=U,V<=N,1<=W<=10000,输入保证任意两点都能互相到达。

【数据规模】

对于30%的数据,有1≤N≤200;

对于100%的数据,有1≤N≤1000,1≤M≤100000。

输出格式:

输出仅一行,包含一个整数,为最少需要的时间。

输入输出样例

输入样例#1:

  1. 5 10
  2. 2 3 5
  3. 1 5 5
  4. 3 5 6
  5. 1 2 8
  6. 1 3 8
  7. 5 3 4
  8. 4 1 8
  9. 4 5 3
  10. 3 5 6
  11. 5 4 2
输出样例#1:

  1. 83
  2.  
  3. 正反两边SPFA
  1. #include <algorithm>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. const int N(+);
  9. const int M();
  10. int n,m;
  11. long long ans;
  12. int hed[N],had[N],sumedge;
  13. struct Edge
  14. {
  15. int v,next,w;
  16. Edge(int v=,int next=,int w=):
  17. v(v),next(next),w(w){}
  18. }edge[M<<];
  19. inline void ins(int u,int v,int w,int *head)
  20. {
  21. edge[++sumedge]=Edge(v,head[u],w);
  22. head[u]=sumedge;
  23. }
  24.  
  25. bool inq[N];
  26. queue<int>que;
  27. int dis1[N],dis2[N];
  28. inline void SPFA_1()
  29. {
  30. memset(dis1,/,sizeof(dis1));
  31. dis1[]=; que.push(); inq[]=;
  32. for(int u,v;!que.empty();)
  33. {
  34. u=que.front(); que.pop(); inq[u]=;
  35. for(int i=hed[u];i;i=edge[i].next)
  36. {
  37. v=edge[i].v;
  38. if(dis1[v]>dis1[u]+edge[i].w)
  39. {
  40. dis1[v]=dis1[u]+edge[i].w;
  41. if(!inq[v]) inq[v]=,que.push(v);
  42. }
  43. }
  44. }
  45. }
  46. inline void SPFA_2()
  47. {
  48. memset(dis2,/,sizeof(dis2));
  49. dis2[]=; que.push(); inq[]=;
  50. for(int u,v;!que.empty();)
  51. {
  52. u=que.front(); que.pop(); inq[u]=;
  53. for(int i=had[u];i;i=edge[i].next)
  54. {
  55. v=edge[i].v;
  56. if(dis2[v]>dis2[u]+edge[i].w)
  57. {
  58. dis2[v]=dis2[u]+edge[i].w;
  59. if(!inq[v]) inq[v]=,que.push(v);
  60. }
  61. }
  62. }
  63. }
  64.  
  65. int main()
  66. {
  67. scanf("%d%d",&n,&m);
  68. for(int u,v,w,i=;i<=m;i++)
  69. {
  70. scanf("%d%d%d",&u,&v,&w);
  71. ins(u,v,w,hed);ins(v,u,w,had);
  72. }
  73. SPFA_1(); SPFA_2();
  74. for(int i=;i<=n;i++) ans+=(long long)dis1[i]+dis2[i];
  75. printf("%lld\n",ans);
  76. return ;
  77. }

洛谷—— P1629 邮递员送信的更多相关文章

  1. 洛谷 P1629 邮递员送信-反向建边

    洛谷 P1629 邮递员送信 题目描述: 有一个邮递员要送东西,邮局在节点 11.他总共要送 n-1n−1 样东西,其目的地分别是节点 22 到节点 nn.由于这个城市的交通比较繁忙,因此所有的道路都 ...

  2. 洛谷——P1629 邮递员送信

    P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...

  3. 洛谷 P1629 邮递员送信 题解

    P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...

  4. 洛谷P1629 邮递员送信

    题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每 ...

  5. 洛谷 P1629 邮递员送信

    题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每 ...

  6. yzoj P1412 & 洛谷P1629 邮递员送信 题解

    有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每次只能带一 ...

  7. 洛谷P1629 邮递员送信 最短路-Djistra

    先上一波题目qwq https://www.luogu.org/problem/P1629· 复习了一波 dijstra 的 priority_queue(优先队列)优化的写法 tips: 求单项路中 ...

  8. Luogu P1629 邮递员送信

    P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...

  9. P1629 邮递员送信

    题目描述: 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员 ...

随机推荐

  1. poj_2187凸包,暴力解法

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...

  2. hdu_1394,线段树求逆序数

    http://www.notonlysuccess.com/index.php/segment-tree-complete/ #include<iostream> #include< ...

  3. 曲根英语万词---二、evoke

    曲根英语万词---二.evoke 一.总结 一句话总结:evoke v.唤起,引起 词根:-voc-, -vok- [词根含义]:声音,叫喊 1.consecrate? v,供奉,奉为神圣 -ate, ...

  4. Pycharm在创建py文件时,如何自动添加默认文件头注释?

    PyCharm是一款很好用的编写Python工程的IDE,用PyCharm创建一个Python文件或者向工程添加一个.py文件时,为了更好的使所编写的代码在各操作环境更好的运行,我们往往需要在.py文 ...

  5. POJ 3145 线段树 分块?+暴力

    思路: 线段树 (分类讨论) 此题数据很水 数据很水 数据很水 但是卡个暴力还是没问题的-- //By SiriusRen #include <cstdio> #include <c ...

  6. webpack 读取文件变量

    1.webpack 获取文件中变量 <%= htmlWebpackPlugin.options.title %> <p><%= htmlWebpackPlugin.opt ...

  7. Android chromium 1

    For Developers‎ > ‎Design Documents‎ > ‎ Java Resources on Android Overview Chrome for Android ...

  8. 使用 Beego 搭建 Restful API 项目

    1 环境准备 首先你需要在你的环境安装以下软件: go:编程语言运行环境 git:版本控制工具 beego:go 语言流行的开发框架 bee:beego 配套的快速搭建工具 你喜欢的数据库:这里以 M ...

  9. 与 JSON 相关的一些操作 (项目中用到一部分,后续逐渐完善)

    1.JSON 打印 console.log(JSON.stringify(data, null, 4)); 2.JSON 格式判断 var isjson = typeof(obj) == " ...

  10. 几个提高效率的PHOTOSHOP秘密快捷键

    1.拖动选择 使用矩形选框工具,在画布上拖动(不要松开鼠标),这时按住空格键,然后移动鼠标,你会发现选区也跟着移动了. 2.左右流量文档 按住Cmd(Ctrl)键,上下滚动鼠标,你会发现文档的滚动条在 ...