题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544

Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Problem Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

Input
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
 
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
 
Sample Input
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
 
Sample Output
3
2

AC代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=;
  4. const int INF=0x3f3f3f3f;
  5.  
  6. int n,m;
  7.  
  8. struct Edge
  9. {
  10. int u,v,w;
  11. Edge(int u,int v,int w){this->u=u,this->v=v,this->w=w;}
  12. };
  13. vector<Edge> E;
  14. vector<int> G[maxn];
  15. void init(int l,int r)
  16. {
  17. E.clear();
  18. for(int i=l;i<=r;i++) G[i].clear();
  19. }
  20. void addedge(int u,int v,int w)
  21. {
  22. E.push_back(Edge(u,v,w));
  23. G[u].push_back(E.size()-);
  24. }
  25.  
  26. bool vis[maxn];
  27. int d[maxn];
  28. void dijkstra(int st)
  29. {
  30. for(int i=;i<=n;i++) d[i]=(i==st)?:INF;
  31. memset(vis,,sizeof(vis));
  32.  
  33. priority_queue< pair<int,int> > Q;
  34. Q.push(make_pair(,st));
  35. while(!Q.empty())
  36. {
  37. int now=Q.top().second; Q.pop();
  38. if(vis[now]) continue;
  39. vis[now]=;
  40. for(int i=;i<G[now].size();i++)
  41. {
  42. Edge &e=E[G[now][i]]; int nxt=e.v;
  43. if(vis[nxt]) continue;
  44. if(d[nxt]>d[now]+e.w)
  45. {
  46. d[nxt]=d[now]+e.w;
  47. Q.push(make_pair(-d[nxt],nxt));
  48. }
  49. }
  50. }
  51. }
  52.  
  53. int main()
  54. {
  55. while(scanf("%d%d",&n,&m) && n+m>)
  56. {
  57. init(,n);
  58. for(int i=,u,v,w;i<=m;i++)
  59. {
  60. scanf("%d%d%d",&u,&v,&w);
  61. addedge(u,v,w);
  62. addedge(v,u,w);
  63. }
  64.  
  65. dijkstra();
  66. printf("%d\n",d[n]);
  67. }
  68. }

时间复杂度 $O\left( {\left| E \right|\log \left| E \right|} \right)$。

HDU 2544 - 最短路 - [堆优化dijkstra][最短路模板题]的更多相关文章

  1. 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain

    循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,fr ...

  2. CCPC-Wannafly Winter Camp Day1 Div1 - 爬爬爬山 - [最短路][堆优化dijkstra]

    题目链接:https://zhixincode.com/contest/3/problem/F?problem_id=39 样例输入 1  4 5 1 1 2 3 4 1 2 1 1 3 1 1 4 ...

  3. LibreOJ #119. 最短路 (堆优化dijkstra)

    题目描述 给一个 n(1≤2500≤n) n(1 \leq 2500 \leq n)n(1≤2500≤n) 个点 m(1≤6200≤m) m(1 \leq 6200 \leq m)m(1≤6200≤m ...

  4. 堆优化Dijkstra计算最短路+路径计数

    今天考试的时候遇到了一道题需要路径计数,然而蒟蒻从来没有做过,所以在考场上真的一脸懵逼.然后出题人NaVi_Awson说明天考试还会卡SPFA,吓得我赶紧又来学一波堆优化的Dijkstra(之前只会S ...

  5. BZOJ 3040 最短路 (堆优化dijkstra)

    这题不是裸的最短路么?但是一看数据范围就傻了.点数10^6,边数10^7.这个spfa就别想了(本来spfa就是相当不靠谱的玩意),看来是要用堆优化dijkstra了.但是,平时写dijkstra时为 ...

  6. POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...

  7. 【堆优化Dijkstra+字典序最短路方案】HDU1385-Minimum Transport Cost

    [题目大意] 给出邻接矩阵以及到达各个点需要付出的代价(起点和终点没有代价),求出从给定起点到终点的最短路,并输出字典序最小的方案. [思路] 在堆优化Dijkstra中,用pre记录前驱.如果新方案 ...

  8. PAT-1030 Travel Plan (30 分) 最短路最小边权 堆优化dijkstra+DFS

    PAT 1030 最短路最小边权 堆优化dijkstra+DFS 1030 Travel Plan (30 分) A traveler's map gives the distances betwee ...

  9. UVA - 11374 - Airport Express(堆优化Dijkstra)

    Problem    UVA - 11374 - Airport Express Time Limit: 1000 mSec Problem Description In a small city c ...

随机推荐

  1. [SLAM] Little about SLAM

    Books from Zhihu: 幽默一把 看完Gonzalez:嗯,好像很好玩的样子,我也来搞一搞.看完Price:什么鬼,怎么这么多公式,公式看不懂肿么破.看完Szeliski:原来用一千页的书 ...

  2. php 内存分配

    php内核中的内存分配 使用的函数有 emalloc(), erealloc() ,这两个函数分别是malloc(),realloc()函数的封装 关于内存分配有四个容器:cache,小块内存链表,大 ...

  3. Laravel查询构造器简介

    数据表 CREATE TABLE IF NOT EXISTS students( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NO ...

  4. 多线程二(GCD)代码笔记

    // // TWFXViewController.h // Demo_GCD // // Created by Lion User on 12-12-11. // Copyright (c) 2012 ...

  5. Binary Numbers

    时空限制 Time Limit:1000ms Resident Memory Limit:1024KB Output Limit:1024B 题目内容 Given a positive integer ...

  6. ios开发之--sizeToFit的用法

    sizeToFit :即当前视图便捷和便捷大小变化(自动根据文本大小改变自身的宽度) 代码如下: - (void)sizeToFitDemo { UILabel * label = [[UILabel ...

  7. cocos2d-x 3.0 在C++中调用lua函数(2)

    个人觉得3.0里面, 在C++下面调用lua函数很不方便, 所以就扩展了一个类, 继承自LuaStack, 代码和使用方式如下: #ifndef __CC_LUA_STACKEX_H_ #define ...

  8. java中类相关注意事项

    下面default类就是默认修饰符的类 1.Java中调用类中属性或方法(不管是否静态属性或方法)都要在类的方法中调用,虽然这个太基础,但今天想在类中调用静态类的静态变量,不能调用: 2.Java调用 ...

  9. SaltStack Grains 和 Pillar

    Grains: (1) grains 是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息(2) grains 是 minion 启动时收集到的一些系统信息,比如操作系统版本.内核版本.C ...

  10. PHP 使用 Memcached

    PHP 想往 Memcached 中增删查改数据,需要先安装 memcache 扩展模块: cd /usr/local/src wget http://www.apelearn.com/bbs/dat ...