题目:http://acm.hdu.edu.cn/showproblem.php?pid=2680

  1. /************************************************************************/
  2. /*
  3. hdu Arbitrage
  4. dijkstra算法
  5. 题目大意:dijkstra算法,求点与点之间最短距离。因为此题的起始点不定,所以可用
  6. 反向图来求得,终点确定,从终点出发,dijkstra算法,求出其他点到终点最小距离。
  7. 本题数据量较大,用floyd算法超时。
  8. */
  9. /************************************************************************/
  10.  
  11. #include <cstdio>
  12. #include <cstring>
  13. #include <string>
  14. #include <map>
  15. #include <algorithm>
  16.  
  17. using namespace std;
  18.  
  19. #define MIN(a,b) a<b?a:b
  20. #define MAX 0xfffffff
  21.  
  22. const int N = ;
  23. int maps[N][N];
  24. int dj[N],vis[N];
  25. int m,n,s,w,num,min_num;
  26.  
  27. void build_map()
  28. {
  29. int p,q,t;
  30. for (int i = ; i <= n; i++)
  31. for (int j = i; j <= n; j++)
  32. maps[i][j] = maps[j][i] = ((i==j)?:MAX);
  33.  
  34. for (int i = ; i <= m; i++)
  35. {
  36. scanf("%d%d%d",&p,&q,&t);
  37. if(maps[q][p] > t) maps[q][p] = t;//这里注意构建反向图
  38. }
  39.  
  40. for (int i = ; i <= n; i++)
  41. dj[i] = MAX;
  42. }
  43.  
  44. /*
  45. //此floyd算法超时
  46. void floyud()
  47. {
  48. for (int k = 1; k <= n; k++)
  49. {
  50. for (int i = 1; i <= n; i++)
  51. for (int j = 1; j <= n; j++)
  52. maps[i][j] = MIN(maps[i][j],maps[i][k] + maps[k][j]);
  53. }
  54. }
  55. */
  56. void DJ()
  57. {
  58. int cur = s;
  59. int next,min;
  60. dj[cur] = ;
  61. while()
  62. {
  63. min = MAX;
  64. vis[cur] = ;
  65. for (int i = ; i <= n; i++)
  66. {
  67. if (vis[i] == )continue;
  68. if (dj[i] > dj[cur] + maps[cur][i])
  69. dj[i] = dj[cur] + maps[cur][i];
  70. if (dj[i] < min)
  71. {
  72. min = dj[i];
  73. next = i;
  74. }
  75. }
  76. if ( min == MAX)break;
  77. cur = next;
  78. }
  79. }
  80.  
  81. int main()
  82. {
  83. while(scanf("%d%d%d",&n,&m,&s)!= EOF )
  84. {
  85. build_map();
  86. memset(vis,,sizeof(vis));
  87. DJ();
  88. min_num = MAX;
  89. scanf("%d",&w);
  90. while(w--)
  91. {
  92. scanf("%d",&num);
  93. if ( dj[num] < min_num)
  94. min_num = dj[num];
  95. }
  96. if (min_num == MAX)
  97. printf("-1\n");
  98. else printf("%d\n",min_num);
  99. }
  100. return ;
  101. }

hdu 2680 Choose the best route (dijkstra算法)的更多相关文章

  1. hdu 2680 Choose the best route (dijkstra算法 最短路问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2680 Choose the best route Time Limit: 2000/1000 MS ( ...

  2. hdu 2680 Choose the best route

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2680 Choose the best route Description One day , Kiki ...

  3. hdu 2680 Choose the best route 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2680 题目意思:实质就是给定一个多源点到单一终点的最短路. 卑鄙题---有向图.初始化map时 千万不 ...

  4. HDU 2680 Choose the best route(SPFA)

    Problem DescriptionOne day , Kiki wants to visit one of her friends. As she is liable to carsickness ...

  5. HDU 2680 Choose the best route(多起点单终点最短路问题)题解

    题意:小A要乘车到s车站,他有w个起始车站可选,问最短时间. 思路:用Floyd超时,Dijkstra遍历,但是也超时.仔细看看你会发现这道题目好像是多源点单终点问题,终点已经确定,那么我们可以直接转 ...

  6. HDU 2680 Choose the best route 最短路问题

    题目描述:Kiki想去他的一个朋友家,他的朋友家包括所有的公交站点一共有n 个,一共有m条线路,线路都是单向的,然后Kiki可以在他附近的几个公交站乘车,求最短的路径长度是多少. 解题报告:这道题的特 ...

  7. HDU 2680 最短路 迪杰斯特拉算法 添加超级源点

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

  8. 【hdu 2544最短路】【Dijkstra算法模板题】

    Dijkstra算法 分析 Dijkstra算法适用于边权为正的情况.它可用于计算正权图上的单源最短路( Single-Source Shortest Paths, SSSP) , 即从单个源点出发, ...

  9. HDU 2068 Choose the best route

    http://acm.hdu.edu.cn/showproblem.php?pid=2680 Problem Description One day , Kiki wants to visit one ...

随机推荐

  1. ROS知识(15)----Actionlib的使用(一)

    Actionlib是ROS非常重要的库,像执行各种运动的动作,例如控制手臂去抓取一个杯子,这个过程可能复杂而漫长,执行过程中还可能强制中断或反馈信息,这时Actionlib就能大展伸手了. 1.原理 ...

  2. 917:Knight Moves

    题目链接:http://noi.openjudge.cn/ch0205/917/ 原题应该是hdu 1372 总时间限制: 1000ms  内存限制: 65536kB 描述 BackgroundMr ...

  3. Eclipse和MyEclipse使用技巧--Eclipse各版本介绍

    进入eclipse的下载官网  http://www.eclipse.org/downloads/  发现,会有多种版本提供下载. 对于刚接触Java开发的初学者,在下载eclipse时,对官网上面提 ...

  4. 进程间通过intent传递数据失败

            <activity android:name=".activity.CreateMessageActivity"             android:pr ...

  5. Swift3 - compare方法之ComparisonResult说明

    Swift3在实现两个对象比较时,引入了compare方法,其中,方法返回值ComparisonResult解释如下: ComparisonResult是一个枚举类型,包含了以下3个成员: 其中: q ...

  6. JavaScript Window Location 当前页面的地址

    window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面. Window Location window.location 对象在编写时可不使用 window ...

  7. iOS 如何写出更加严谨的应用

    本文旨在介绍一些能够帮助大家避开一些开发误区的经验. 一: 在开发中,经常能够遇到共用同一个界面的情况,一般情况下,我们会根据传入的model去做数据处理和保存. 当然如果不存在复用的情况下,根本不需 ...

  8. A. Candy Bags

    A. Candy Bags http://codeforces.com/problemset/problem/334/A   time limit per test 1 second memory l ...

  9. 简单几步让CentOS系统时间同步(转)

    在使用CentOS系统的时候,我们可能会遇到时间不准的问题,那我们如何解决这个我问题呢,下面就来教大家一个CentOS系统时间同步的方法,希望大家可以解决自己所存在的疑问. CentOS系统时间同步的 ...

  10. CentOS7.2安装python2.7.12

    目前CentOS7.2自带的python版本是python2.7.5.由于yum这个软件需要系统自带的python工作. 如果冒然用自己安装的python替换掉系统自带的,可能造成yum不工作. 先安 ...