HDU 3790 最短路径问题

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。

Input

输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。 
(1<n<=1000, 0<m<100000, s != t)

Output

输出 一行有两个数, 最短距离及其花费。

Sample Input

  1. 3 2
  2. 1 2 5 6
  3. 2 3 4 5
  4. 1 3
  5. 0 0

Sample Output

  1. 9 11
  2.  
  3. Dijkstra算法模版题,没有什么好说的;
  4.  
  5. AC代码:
  1. #include"algorithm"
  2. #include"iostream"
  3. #include"cstring"
  4. #include"cstdlib"
  5. #include"string"
  6. #include"cstdio"
  7. #include"vector"
  8. #include"cmath"
  9. #include"queue"
  10. using namespace std;
  11. typedef long long LL;
  12. #define memset(x,y) memset(x,y,sizeof(x))
  13. #define memcpy(x,y) memcpy(x,y,sizeof(x))
  14. #define MX 401
  15.  
  16. const int dij_v=1005;
  17. const int dij_edge=100005;
  18.  
  19. template <class T>
  20. struct Dijkstra {
  21. struct Edge {
  22. int v,nxt,cost;
  23. T w;
  24. } E[dij_edge<<1];
  25.  
  26. int Head[dij_v],erear,money[dij_v];
  27. T p[dij_v],INF;
  28.  
  29. typedef pair< T ,int > PII;
  30. void edge_init() {
  31. erear=0;
  32. memset(money,0);
  33. memset(Head,-1);
  34. }
  35.  
  36. void edge_add(int u,int v,T w,int cost) {
  37. E[erear].v=v;
  38. E[erear].w=w;
  39. E[erear].cost=cost;
  40. E[erear].nxt=Head[u];;
  41. Head[u]=erear++;
  42. }
  43.  
  44. void run(int u) {
  45. memset(p,0x3f);
  46. INF=p[0];
  47. priority_queue<PII ,vector<PII >,greater<PII > >Q;
  48. while(!Q.empty()) {
  49. Q.pop();
  50. }
  51. Q.push(PII(0,u));
  52. p[u]=0;
  53. while(!Q.empty()) {
  54. PII a=Q.top();
  55. Q.pop();
  56. int u=a.second;
  57. if(a.first!=p[u])continue;
  58. for(int i=Head[u]; ~i; i=E[i].nxt) {
  59. int v=E[i].v;
  60. int cost=E[i].cost;
  61. T w=E[i].w;
  62. if(p[u]+w==p[v]) {
  63. money[v]=min(money[v],money[u]+cost);
  64. }
  65. if(p[u]+w<p[v]) {
  66. p[v]=w+p[u];
  67. money[v]=money[u]+cost;
  68. Q.push(PII(p[v],v));
  69. }
  70. }
  71. }
  72. }
  73. };
  74.  
  75. Dijkstra<int > dij;
  76.  
  77. int main() {
  78. int n,m;
  79. while(~scanf("%d%d",&n,&m)) {
  80. if(!n&&!m)break;
  81. dij.edge_init();
  82. for(int i=1; i<=m; i++) {
  83. int u,v,w,l;
  84. scanf("%d%d%d%d",&u,&v,&w,&l);
  85. dij.edge_add(u,v,w,l);
  86. dij.edge_add(v,u,w,l);
  87. }
  88. int st,ed;
  89. scanf("%d%d",&st,&ed);
  90. dij.run(st);
  91. printf("%d %d\n",dij.p[ed],dij.money[ed]);
  92. }
  93. return 0;
  94. }

  

ACM: HDU 3790 最短路径问题-Dijkstra算法的更多相关文章

  1. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  2. hdu 2680 最短路径(dijkstra算法+多源最短路径单源化求最小值)这题有点意思

    Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. HDU - 3790 最短路径问题 (dijkstra算法)

    HDU - 3790 最短路径问题 Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...

  4. 单源最短路径(dijkstra算法)php实现

    做一个医学项目,当中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路例如以下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么( ...

  5. 【算法设计与分析基础】25、单起点最短路径的dijkstra算法

    首先看看这换个数据图 邻接矩阵 dijkstra算法的寻找最短路径的核心就是对于这个节点的数据结构的设计 1.节点中保存有已经加入最短路径的集合中到当前节点的最短路径的节点 2.从起点经过或者不经过 ...

  6. 数据结构与算法--最短路径之Dijkstra算法

    数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们 ...

  7. 最短路径 | 深入浅出Dijkstra算法(一)

    参考网址: https://www.jianshu.com/p/8b3cdca55dc0 写在前面: 上次我们介绍了神奇的只有五行的 Floyd-Warshall 最短路算法,它可以方便的求得任意两点 ...

  8. 经典树与图论(最小生成树、哈夫曼树、最短路径问题---Dijkstra算法)

    参考网址: https://www.jianshu.com/p/cb5af6b5096d 算法导论--最小生成树 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. im ...

  9. hdu 3790 最短路径问题(双重权值,dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...

随机推荐

  1. python 之socket 网络编程

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...

  2. 【PHP&&MySQL详解】

    PHP和MySQL是一对好搭档,PHP中有一个很大的扩展库专门针对对MySQL的操作.当然,作为一个PHP程序员,首先对MySQL的增删查改要非常熟悉才行. MySQL数据库的连接数大概在6w个左右, ...

  3. 排队打饭 sdut 2443【最简单的贪心法应用举例】

    排队打饭 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...

  4. .NET NLog 详解(二)

    Git是个很好的源码管理系统,你可以瞬间切换为任何历史版本.为了更好的解析NLog这个组件,我们将时钟倒拨回2004年.(注意:NLog v0.9 has been released 是在2005-0 ...

  5. hdu 5291 dp+优化 ****

    多校实在高能 题解链接 题意:有n中糖果,每种糖果有ai个.分给A,B两个人.两人的糖果要一样多,可以都是0,1......m个.同一种糖果没有区别. 问有几种分法. 定义dp[i]表示两人之间相差i ...

  6. [Linux] 学习笔记之安装学习环境(sshd, lrzsz)

    紧接前一篇,在VMWare安装完Linux,这个时候我们要使用远程工具连接到虚拟机上去了,以前一直使用Putty,后来到新公司之后,推荐使用SecureCRT,使用之后,觉得效果不错,但是每次连接都失 ...

  7. 在Salesforce中处理Email的发送

    在Salesforce中可以用自带的 Messaging 的 sendEmail 方法去处理Email的发送 请看如下一段简单代码: public boolean TextFormat {get;se ...

  8. ZOJ 3494 BCD Code(AC自动机+数位DP)

    BCD Code Time Limit: 5 Seconds      Memory Limit: 65536 KB Binary-coded decimal (BCD) is an encoding ...

  9. C++ 拷贝构造函数 和 六大函数

    1.  C++什么时候会调用 拷贝构造函数? a.一个对象作为函数参数,以值传递的方式传入函数体: b.一个对象作为函数返回值,以值传递的方式从函数返回:(实际使用时,会被编译器优化掉) c.一个对象 ...

  10. 【maven】 在 MyEcplise上使用maven搭建Web项目

    二.在My Ecplise上使用Maven搭建Web项目 1.新建一个maven项目   2.create一个简单的骨架 3.就像在ecplise中一样设置项目的以下配置   4.新创建的项目结构如下 ...