UVA 10801 - Lift Hopping (Dijkstra算法/最短路)
2015-08-23 21:38
507 查看
比较简单的最短路问题,唯一的不同是更换电梯的时候需要多加60s等待时间,而且第一次上电梯不需要等待60s 。注意到这些细节之后在结构体中多保存一个电梯的id,这样在松弛操作的时候分情况讨论一下就行了 。
细节参见代码:
细节参见代码:
#include<bits/stdc++.h> using namespace std; const double INF = 1000000000; const int maxn = 505; int n,k,done[maxn],kase = 0,cur,t[maxn],a[maxn]; int d[maxn]; char s[maxn]; struct Node { int from,to,d,id; Node(int from=0,int to=0,int d=0,int id=0):from(from),to(to),d(d),id(id) {} }e[maxn*maxn] ; vector<int> g[maxn]; struct heapNode{ int d,u,id; bool operator < (const heapNode& rhs) const { return d > rhs.d; } }; int dijkstra(int s) { priority_queue<heapNode> q; for(int i=0;i<100;i++) d[i] = INF , done[i] = 0; d[s] = 0; q.push((heapNode){0,s,-1}); while(!q.empty()) { heapNode x = q.top(); q.pop(); int u = x.u; if(u == k) return d[u]; if(done[u]) continue; done[u] = true; for(int i=0;i<g[u].size();i++) { Node& ed = e[g[u][i]]; if(ed.id != x.id && x.id != -1) if(d[ed.to] > d[u] + ed.d + 60) { d[ed.to] = d[u] + ed.d + 60; q.push((heapNode){d[ed.to],ed.to,ed.id}); } else { if(d[ed.to] > d[u] + ed.d) { d[ed.to] = d[u] + ed.d; q.push((heapNode){d[ed.to],ed.to,ed.id}); } } } } return -1; } int main() { while(~scanf("%d%d",&n,&k)) { for(int i=0;i<n;i++) scanf("%d",&t[i]) ; for(int i=0;i<100;i++) g[i].clear(); cur = 0; char c = getchar(); for(int i=0;i<n;i++) { gets(s); int len = strlen(s) , v = 0 , cnt = 0; for(int j=0;j<len;j++) { if(s[j] == ' ') { a[cnt++] = v; v= 0; } else v = v*10 + s[j]-'0'; if(j == len-1) a[cnt++] = v; } for(int k=0;k<cnt;k++) //建图 for(int j=0;j<cnt;j++) { if(k == j) continue; e[cur] = Node(a[k],a[j],abs(a[k]-a[j])*t[i],i); g[a[k]].push_back(cur++); } } int ans = dijkstra(0); if(ans == -1) printf("IMPOSSIBLE\n"); else printf("%d\n",ans); } return 0; }
相关文章推荐
- Centos6.5下MySQL5.5.45数据库迁移
- Linux的一些基本命令
- Linux命令详解(3):cd
- HBase-1.0.1学习笔记(二)HBase Shell工具使用
- Linux基础知识--4.LInux用户和用户组以及权限管理
- Linux基础--/etc/shadow中字段的分支和操作
- nginx nginx.conf配置文件
- Ubuntu学习之Linux文件和目录管理
- CentOS6.5实现PXE+Kickstart无人值守安装操作系统
- hdu 5420 Victor and Proposition 线段树建图+强连通分量
- Nginx开发从入门到精通十三
- linux时间命令date、clock、hwclock
- 六种微服务架构的设计模式
- Nginx开发从入门到精通十二
- Linux下复制粘贴快捷键
- Nginx开发从入门到精通十一
- Nginx开发从入门到精通十
- Nginx开发从入门到精通九
- Nginx开发从入门到精通八
- shell-字符处理命令/条件判断