题目连接

http://acm.hdu.edu.cn/showproblem.php?pid=2112

HDU Today

Description

经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。

Input

输入数据有多组,每组的第一行是公交车的总数$N\ (0 \leq N \leq 10000)$;
第二行有徐总的所在地start,他的目的地end;
接着有$n$行,每行有站名$s$,站名$e$,以及从$s$到$e$的时间整数$t\ (0<t<100)$(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果$N==-1$,表示输入结束。

Output

如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。

Sample Input

6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1

Sample Output

50

最短路。。

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<string>
  8. #include<queue>
  9. #include<map>
  10. using std::map;
  11. using std::cin;
  12. using std::cout;
  13. using std::endl;
  14. using std::find;
  15. using std::sort;
  16. using std::pair;
  17. using std::vector;
  18. using std::string;
  19. using std::multimap;
  20. using std::priority_queue;
  21. #define pb(e) push_back(e)
  22. #define sz(c) (int)(c).size()
  23. #define mp(a, b) make_pair(a, b)
  24. #define all(c) (c).begin(), (c).end()
  25. #define iter(c) decltype((c).begin())
  26. #define cls(arr,val) memset(arr,val,sizeof(arr))
  27. #define cpresent(c, e) (find(all(c), (e)) != (c).end())
  28. #define rep(i, n) for (int i = 0; i < (int)(n); i++)
  29. #define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)
  30. const int N = ;
  31. typedef unsigned long long ull;
  32. struct P {
  33. int w, v;
  34. P(int i = , int j = ) :w(i), v(j) {}
  35. inline bool operator<(const P &a) const {
  36. return w > a.w;
  37. }
  38. };
  39. struct Node { int to, w, next; };
  40. struct Dijkstra {
  41. Node G[N];
  42. map<string, int> A;
  43. int start, end, tot, dist[], head[N];
  44. inline void init() {
  45. tot = , A.clear();
  46. cls(head, -), cls(dist, 0x3f);
  47. }
  48. inline void add_edge(int u, int v, int w) {
  49. G[tot] = { v, w, head[u] }; head[u] = tot++;
  50. }
  51. inline void built(int n) {
  52. char str[][];
  53. int u, v, w, k = ;
  54. scanf("%s %s", str[], str[]);
  55. A[str[]] = k++, A[str[]] = k++;
  56. rep(i, n) {
  57. scanf("%s %s %d", str[], str[], &w);
  58. if (A.find(str[]) == A.end()) A[str[]] = k++;
  59. if (A.find(str[]) == A.end()) A[str[]] = k++;
  60. u = A[str[]], v = A[str[]];
  61. add_edge(u, v, w), add_edge(v, u, w);
  62. }
  63. start = A[str[]], end = A[str[]];
  64. }
  65. inline void dijkstra() {
  66. dist[start] = ;
  67. priority_queue<P> q;
  68. q.push(P(, start));
  69. while (!q.empty()) {
  70. P t = q.top(); q.pop();
  71. int u = t.v;
  72. if (dist[u] < t.w) continue;
  73. for (int i = head[u]; ~i; i = G[i].next) {
  74. int &w = dist[G[i].to];
  75. if (w > dist[u] + G[i].w) {
  76. w = dist[u] + G[i].w;
  77. q.push(P(w, G[i].to));
  78. }
  79. }
  80. }
  81. printf("%d\n", dist[end] == (int)0x3f3f3f3f ? - : dist[end]);
  82. }
  83. }go;
  84. int main() {
  85. #ifdef LOCAL
  86. freopen("in.txt", "r", stdin);
  87. freopen("out.txt", "w+", stdout);
  88. #endif
  89. int n;
  90. while (~scanf("%d", &n) && n != -) {
  91. go.init();
  92. go.built(n);
  93. go.dijkstra();
  94. }
  95. return ;
  96. }

hdu 2112 HDU Today的更多相关文章

  1. HDU 2112 HDU Today(Dijkstra)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others ...

  2. hdu 2112 HDU Today (floyd算法)

    这道题貌似在原来学长给我们的搞的小比赛中出过! 这次又让我遇到,果断拿下! 不过方法很蠢,跑了1000多ms,虽然要求5000ms以内! 题目就是给你一些位置之间的距离,然后再让你求特定的两点之间的距 ...

  3. hdu 2112 HDU Today (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给出起点和终点,然后算出最短的路. 不过有好多细节要注意: (1)起始点和终止点相等的 ...

  4. hdu 2112 HDU Today 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目意思:又是求最短路的,不过结合埋字符串来考查. 受之前1004 Let the Balloo ...

  5. HDU 2112 HDU Today (Dijkstra算法)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. HDU 2112 HDU Today(最短路径+map)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDU 2112 HDU Today 最短路

    题目描述: Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这 ...

  8. hdu 2112 HDU Today(map与dijkstra的结合使用)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. HDU 2112 HDU Today(STL MAP + Djistra)

    题目链接:HDU Today 立即集训要開始,抓紧时间练练手,最短路的基础题,第一次用STL的map 题目非常水,可是错了N遍.手贱了.本题不优点理的就是把地名转化为数字 #include <i ...

随机推荐

  1. 慕课网-安卓工程师初养成-4-6 Java条件语句之 switch

    来源:http://www.imooc.com/code/1358 当需要对选项进行等值判断时,使用 switch 语句更加简洁明了.例如:根据考试的名次,给予前 4 名不同的奖品.第一名,奖励笔记本 ...

  2. com学习(五)——实现多接口

    从第五回开始到第七回,咱们用 ATL 写了一个简单的 COM 组件,之所以说简单,是因为在组件中,只实现了一个自定义(custom)的接口 IFun.当然如果想偷懒的话,我们可以把 200 个函数都加 ...

  3. php array(object) 与xml相互转换

    private function _array_to_xml($source, $charset='utf-8'){ $array = json_decode($source); $pre = '&l ...

  4. 在集群环境中使用 EhCache 缓存系统|RMI 集群模式

    RMI 是 Java 的一种远程方法调用技术,是一种点对点的基于 Java 对象的通讯方式.EhCache 从 1.2 版本开始就支持 RMI 方式的缓存集群.在集群环境中 EhCache 所有缓存对 ...

  5. Ossim应用体验视频

    Ossim体验视频 近期,我写的有关Ossim应用的系列文章网友们非常关注,这里对大家提出有一些问题我制作了高清的视频和截图发布到网站,以让更多的人了解这款开源安全平台.在年后出版的教程中会详细讲解o ...

  6. ng-class ionic

    我发现 ng-class="{yourclass:true,outerclass:false}" 竟然不起作用...囧.... 幸好有Google  .... <p ng-c ...

  7. C#多线程案例基础

    C#多线程案例基础(转) 在学习多线程之前,我们先来看几个概念: 1,什么是进程?    当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源,当然一个程序也可能开 ...

  8. JPA 批量新增

    1. 在实现类 增加 EntityManager 注入 private EntityManager em; @PersistenceContext(name = "EntityManager ...

  9. C#中string类型前加@标志的作用

    转自:http://stackoverflow.com/questions/4879152/c-sharp-before-a-string   (stackoverflow) string字符串前加@ ...

  10. hdu2571

    if(x==1) f(x,y)=max{f(x,y-1),f(x,z)}  {y%z==0&&1<y/z<=y&&1<=z<<y} els ...