洛谷 1629_邮递员送信_Dijkstra
来源:互联网 发布:淘宝的详情页怎么做 编辑:程序博客网 时间:2024/06/07 09:48
题目描述
有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间。这个邮递员每次只能带一样东西。求送完这N-1样东西并且最终回到邮局最少需要多少时间。
思路
正着跑一边,把边倒过来跑一边就可以了
O(n^2)
#include <stdio.h>#define maxn 3001#define INF 0x7f7f7f7fint a[maxn][maxn],d[7001],f[7001],dd[maxn],fl[maxn],aa[maxn][maxn];int main(){ int n,m,s,e; scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) { a[i][j]=INF; aa[i][j]=INF; } for (int i=1;i<=m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); if (z<a[x][y]) a[x][y]=z; if (z<aa[y][x]) aa[y][x]=z; } f[1]=1; fl[1]=1; for (int i=1;i<=n;i++) { d[i]=a[1][i]; dd[i]=aa[1][i]; } int u=0,u1=0; do { u=0; int mi=INF; for (int i=1;i<=n;i++) { if (f[i]==0&&d[i]<mi) { u=i; mi=d[i]; } } if (u!=0) { f[u]=1; for (int i=1;i<=n;i++) { if (f[i]==0&&d[u]+a[u][i]<d[i]) { d[i]=d[u]+a[u][i]; } } } } while (u!=0); do { u1=0; int min=INF; for (int i=1;i<=n;i++) { if (fl[i]==0&&dd[i]<min) { u1=i; min=dd[i]; } } if (u1!=0) { fl[u1]=1; for (int i=1;i<=n;i++) { if (fl[i]==0&&dd[u1]+aa[u1][i]<dd[i]) { dd[i]=dd[u1]+aa[u1][i]; } } } } while (u1!=0); int ans=0; for (int i=2;i<=n;i++) ans+=d[i]+dd[i]; printf("%d\n",ans);}
1 0
- 洛谷 1629_邮递员送信_Dijkstra
- [洛谷1629] 邮递员送信
- 【洛谷1629】 邮递员送信
- 洛谷P1629 邮递员送信
- 洛谷 P1629 邮递员送信
- 洛谷 P1629 邮递员送信
- 洛谷P1629 邮递员送信
- 洛谷 P1629 邮递员送信
- 洛谷P1629 邮递员送信
- 洛谷 P1629 邮递员送信
- 【洛谷】P1629 邮递员送信
- 巧解 洛谷 P1629 邮递员送信
- 邮递员送信
- 邮递员送信(luogu 1629)题解
- 【洛谷 1627】 邮递员送信 正反两遍最短路
- 邮递员送信(letter)
- Luogu P1629 邮递员送信
- 洛谷 LUOGU P1629 邮递员送信 最短路问题
- Google Page Rank 算法解析
- SpringMVC关于事务的处理问题(待解决)
- android 7.0 关于分屏后出现白边问题
- 联想笔记本B40进行bios关闭tfn功能键方法
- 1014. 福尔摩斯的约会 (20)
- 洛谷 1629_邮递员送信_Dijkstra
- 从 request.getParameterNames() 到 Enumeration
- 漫步数学分析二十六——积分方程与不动点
- java开发面试经验
- 小公司的经典管理系统
- Eclipse中10个最有用的快捷键组合
- C++ stringstream 简化数据类型转换
- 双色球的java代码
- 机器学习:利用卷积神经网络实现图像风格迁移 (一)