HDU 2145 (A strange lift) 最短路(Dijkstra)
2015-06-07 21:07
441 查看
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
没什么可以注意的就是终点当成起点,注意floyd会超时,因为我一开始就是用floyd写的但我不知道为毛300*300*300会超时。
还有一点要注意的就是结构题快排的cmp函数的内部结构。
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define inf 0x7ffffff using namespace std; const int N=300+5; int map ,p ,spd ; int n,m,k; int vis ,dis ; struct node { double tim; int len; int id; }V ; bool cmp(node a,node b) { if(a.tim==b.tim) { if(a.len==b.len) { return a.id>b.id; } else return a.len>b.len; } else return a.tim<b.tim; } void dijkstra(int ed) { memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { dis[i]=map[ed][i]; } vis[ed]=1; dis[ed]=0; for(int i=2;i<=n;i++) { int temp; int Min=inf; for(int j=1;j<=n;j++) { if(!vis[j]&&Min>dis[j]) { temp=j; Min=dis[j]; } } if(Min==inf) break; vis[temp]=1; for(int j=1;j<=n;j++) { if(!vis[j]&&map[temp][j]<inf) { if(dis[j]>dis[temp]+map[temp][j]) { dis[j]=dis[temp]+map[temp][j]; } } } } } int main() { while(~scanf("%d%d%d",&n,&m,&k)) { int ed; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) map[i][j]=0; else map[i][j]=inf; } } for(int i=1;i<=k;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); if(w<map[v][u]) { map[v][u]=w; } } scanf("%d",&ed); dijkstra(ed); for(int i=1;i<=m;i++) { scanf("%d",&p[i]); } for(int i=1;i<=m;i++) { scanf("%d",&spd[i]); } for(int i=1;i<=m;i++) { if(dis[p[i]]>=inf) { V[i].tim=inf; V[i].len=inf; V[i].id=i; } else { V[i].tim=dis[p[i]]*1.0/spd[i]; V[i].len=dis[p[i]]; V[i].id=i; } } sort(V+1,V+1+m,cmp); if(V[1].tim==inf) printf("No one\n"); else printf("%d\n",V[1].id); } return 0; }
相关文章推荐
- android 判断字符串是否为数字或中文或字母
- 宣传
- python爬虫教程
- android 判断字符串是否为数字或中文或字母 分类: Android JAVA 2015-06-07 21:07 29人阅读 评论(0) 收藏
- Net 服务命令行参考之二
- Conditional Comments 条件注释
- Conditional Comments 条件注释
- Storm源码浅析之topology的提交
- 加法器与乘法器
- Android的DrawText详解
- maven和ant 比较
- Remove Duplicates from Sorted Array II ——LeetCode
- 自定义cell的流程
- 项目可用的开源库
- Binary Tree Level Order Traversal II
- Linux服务器防Ping
- visio 2003 怎么样画括号
- word2003绘图工具在哪
- Canny边缘检测算法原理及其VC实现详解(二)
- 一个好用的.vimrc文件