HDU 2122 HDU Today(dijkstra+map)
2015-08-11 21:16
260 查看
HDU Today
[align=left]Problem Description[/align]经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
[align=left]Input[/align]
输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
[align=left]Output[/align]
如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
[align=left]Sample Input[/align]
6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
[align=left]Sample Output[/align]
50
Hint:
The best route is:
xiasha->ShoppingCenterofHangZhou->supermarket->westlake
虽然偶尔会迷路,但是因为有了你的帮助
**和**从此还是过上了幸福的生活。
――全剧终――
#include<map> #include<iostream> #include<string> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int inf=0x3f3f3f3f; int G[155][155],vis[155],d[155]; map<string,int>edges; int t,n; int dijkstra(int S,int T) { int u,i,j; memset(vis,0,sizeof(vis)); //memset(d,0,sizeof(d)); for(i=0;i<=t;i++) d[i]=G[S][i]; d[S]=0; vis[S]=1; for(i=1;i<n;i++) { int temp=inf; for(j=0;j<=t;j++) { if(!vis[j]&&d[j]<temp) { temp=d[j]; u=j; } } if(temp==inf) continue; vis[u]=true; for(j=0;j<=t;j++) { if(!vis[j]&&d[u]+G[u][j]<d[j]) d[j]=d[u]+G[u][j]; } } return d[T]; } int main() { int i,S,T,num; string s1,s2; // freopen("in.txt","r",stdin); while(scanf("%d",&n)&&n!=-1) { t=-1; edges.clear(); memset(G,inf,sizeof(G)); cin>>s1>>s2; edges[s1]=++t; S=t; if(!edges.count(s2)) edges[s2]=++t; T=t; for(i=0;i<n;i++) { cin>>s1>>s2>>num; if(!edges.count(s1)) edges[s1]=++t; if(!edges.count(s2)) edges[s2]=++t; G[edges[s2]][edges[s1]]=G[edges[s1]][edges[s2]]=min(num,G[edges[s1]][edges[s2]]); } int ans=dijkstra(S,T); if(ans==inf) printf("-1\n"); else printf("%d\n",ans); } return 0; }
相关文章推荐
- 黑马程序员——详细的类的声明和实现
- Hdu 3068 Manacher算法求最长回文串长度
- 更新UI方式
- IOS 本地通知和远程通知
- HDU 5371 (2015多校联合训练赛第七场1003)Hotaru's problem(manacher+二分/枚举)
- POJ 3253 Fence Repair
- [JavaSecurity] - RSA Encryption
- TC SRM 665 DIV2 A LuckyXor 暴力
- 配置 Windows 下的 nodejs C++ 模块编译环境 安装 node-gyp
- Thread类的interrupted方法和isInterrupted方法的区别
- centos iso文件配置local yum源
- 堆区 内存的动态分配和手动释放 重复练习5遍
- 主线程和子线程
- NSURLProtocol和NSRunLoop的那些坑
- [swift]问号和叹号的区别
- 安德鲁斯Selector简介
- Divide and Conquer.(Merge Sort) by sixleaves
- CentOS 修改root密码时报错
- 比特币套利二三事儿
- 数学期望