HDOJ 2112 HDU Today (STL_map + dijkstra)
来源:互联网 发布:2站域名www.tt69.com 编辑:程序博客网 时间:2024/06/17 19:36
HDU Today
Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 31623 Accepted Submission(s): 7698
Problem Description
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
Input
输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
Output
如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
Sample Input
6xiasha westlakexiasha station 60xiasha ShoppingCenterofHangZhou 30station westlake 20ShoppingCenterofHangZhou supermarket 10xiasha supermarket 50supermarket westlake 10-1
Sample Output
50Hint:The best route is:xiasha->ShoppingCenterofHangZhou->supermarket->westlake虽然偶尔会迷路,但是因为有了你的帮助**和**从此还是过上了幸福的生活。――全剧终――
Author
lgx
Source
ACM程序设计_期末考试(时间已定!!)
Recommend
lcy | We have carefully selected several similar problems for you: 1217 2680 1385 1690 2722
分析: 之前的都是用二维数组存图,地点都由下标表示。所以这题首要的就是把地名用整数下标表示,再用二维数组存图。
map的基本用法, 参考: http://www.cnblogs.com/hailexuexi/archive/2012/04/10/2440209.html
AC代码:
#include <bits/stdc++.h>#define PI acos(-1)#define INF 0x3f3f3f3f#define SCD(a) scanf("%d",&a)#define SCDD(a,b) scanf("%d%d",&a,&b)#define SCF(a) scanf("%lf",&a)#define PTD(a) printf("%d", a)#define PTDE(a) printf("%d\n",a)#define MST(a,b) memset(a, b, sizeof(a))typedef long long LL;using namespace std;// hdoj 2112const int M = 160;int ans = 0;int T, n, m, t;int maz[M][M], dis[M];bool vis[M];map<string, int> mp;void init(){ int i, j; t = 1; mp.clear(); MST(vis, false); fill(dis, dis+n+2, INF); for(i=0; i<M; i++){ for(j=0; j<M; j++) maz[i][j] = INF; }}void dijkstra(int st, int en){ int i, j, pos, d; for(i=1; i<=t; i++) dis[i] = maz[st][i]; dis[st] = 0; vis[st] = true; for(i=1; i<=n; i++){ d = INF; for(j=1; j<=t; j++){ if(!vis[j] && dis[j] < d){ d = dis[j]; pos = j; } } vis[pos] = true; if(d == INF) continue; for(j=1; j<=t; j++){ if(!vis[j] && dis[j] > dis[pos] + maz[pos][j]){ dis[j] = dis[pos] + maz[pos][j]; } } } ans = dis[en];}int main(){ int i, j, k, d; string sa, sb; while(~SCD(n) && n!=-1){ init(); string st, en; cin>>st>>en; mp[st] = t; t++; mp[en] = t; t++; for(i=0; i<n; i++){ cin>>sa>>sb; SCD(d); if(!mp[sa]){ mp[sa] = t; t++; } if(!mp[sb]){ mp[sb] = t; t++; } maz[ mp[sa] ][ mp[sb] ] = maz[ mp[sb] ][ mp[sa] ] = min(maz[ mp[sa] ][ mp[sb] ], d); } dijkstra( mp[st], mp[en] ); if(ans != INF) PTDE(ans); else PTDE(-1); } return 0;}/**/
阅读全文
0 0
- HDOJ 2112 HDU Today (STL_map + dijkstra)
- HDOJ 2112 HDU Today (最短路 Dijkstra && SPFA)
- hdoj 2112 HDU Today dijkstra(字符串编号)
- HDOJ 2112 HDU Today(最短路--dijkstra)
- HDU 2112 Today (Dijkstra)
- HDU 2112 Today Dijkstra
- HDU Today ((Dijkstra)
- hdu 2112 HDU Today (dijkstra)
- HDU 2112 HDU Today(Dijkstra)
- HDU-#2112 HDU Today(Dijkstra+map)
- hdu 2112 HDU Today (Dijkstra + map)
- hdu-2112-HDU Today(dijkstra + map)
- HDU 2112 HDU Today(dijkstra算法)
- hdu 2112 HDU Today &&(dijkstra)
- HDOJ HDU Today 2112【最短路Dijkstra+字符串处理】
- HDOJ 2112 HDU Today(最短路,dijkstra算法)
- 杭电-2112 HDU Today(dijkstra)
- HDU 2112 HDU Today Dijkstra
- CSDN博客的积分计算方法和博客排名规律
- C++控制台程序判断输入的数字
- MySQL关键字
- pandas rolling_mean
- 使用HttpHandler实现图片防盗链
- HDOJ 2112 HDU Today (STL_map + dijkstra)
- VS2017整合proc(C语言篇)
- MYSQL 最近知识总结(3)
- 爬虫初体验-- 爬取当当书籍
- [编程题] 赶去公司
- 图的最小生成树---Prim算法
- 深入理解JVM总结-垃圾收集器与内存分配策略
- 2017/8/19 离线赛
- js实现内容查找和替换