/*
题目大意:
就是一幢大厦中有0~99的楼层, 然后有1~5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置!
问从第0层楼到第k层最少经过多长时间到达! 思路:明显的Dijkstra ,在建图的时候u->v可能有多个电梯到达,取时间最少的当作路径的权值!
如果我们发现 d[i] > d[j] + map[j][i] + 60, 那么说明从第0层到达第 i 层的时间大于从第j层
转移到其他电梯然后到达第 i 层的时间,那么就更新d[i]的值! */
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm> using namespace std;
const int INF = 0x3f3f3f3f;
int map[][];
int d[];
int t[];
int lift[];
int vis[];
int n, k; void addEdge(int a, int b, int tt){
int dist=abs(a-b)*tt;
if(map[a][b]>dist)
map[a][b]=map[b][a]=dist;
} void Dijkstra(){
int root=, p;
memset(vis, , sizeof(vis));
vis[]=;
for(int i=; i<=; ++i){
int minLen=INF;
for(int j=; j<=; ++j){
if(!vis[j] && d[j] > d[root]+map[root][j]+)
d[j] = d[root]+map[root][j]+;
if(!vis[j] && minLen>d[j]){
minLen=d[j];
p=j;
}
}
if(minLen==INF)
return ;
root=p;
vis[root]=;
}
} int main(){
while(scanf("%d%d", &n, &k)!=EOF){
memset(map, 0x3f, sizeof(map));
memset(d, 0x3f, sizeof(d));
d[]=;
for(int i=; i<=n; ++i)
scanf("%d", &t[i]);
char ch; for(int i=; i<=n; ++i){
int cnt=;
while(){
scanf("%d%c", &lift[cnt++], &ch);
for(int j=; j<cnt-; ++j)
addEdge(lift[cnt-], lift[j], t[i]); if(ch=='\n')
break;
}
} Dijkstra(); if(k==)
printf("0\n");
else if(d[k]!=INF)
printf("%d\n", d[k]-);
else printf("IMPOSSIBLE\n");
}
return ;
}

uva 10801 - Lift Hopping(最短路Dijkstra)的更多相关文章

  1. UVA 10801 Lift Hopping 最短路

    2种方式直接代码就可以了.注意首次不需要60S的转换 #include <map> #include <set> #include <list> #include ...

  2. UVa 10801 - Lift Hopping(dijkstra最短路)

    根据题意,以每一层楼为顶点,每个电梯可以到达的两层楼之间的秒数为每一条边的权值,以此构建一个无向图.然后利用dijkstra求出最短的时间,注意每次换乘电梯需要等待60s(因为同一个电梯上的楼层是相互 ...

  3. UVA 10801 Lift Hopping 电梯换乘(最短路,变形)

    题意: 有n<6部电梯,给出每部电梯可以停的一些特定的楼层,要求从0层到达第k层出来,每次换乘需要60秒,每部电梯经过每层所耗时不同,具体按 层数*电梯速度 来算.问经过多少秒到达k层(k可以为 ...

  4. UVa 10801 Lift Hopping (Dijkstra)

    题意:有一栋100层的大楼(标号为0~99),里面有n个电梯(不超过5个),以及要到达的层数(aid),然后是每个电梯走一层所需的时间, 再n行就是对应每个电梯可以到达的层数,数量不定.然后每装换一次 ...

  5. UVa 10801 Lift Hopping / floyd

    乘电梯 求到目标层的最短时间 有n个电梯 换一个电梯乘需要额外60秒 所以建图时每个电梯自己能到的层数先把时间算好 这是不需要60秒的 然后做floyd时 如果松弛 肯定是要换电梯 所以要加60秒 # ...

  6. UVA 10801 Lift Hopping

    算是一道需要动脑筋的最短路问题了,关键在于建图部分,对于n个电梯中每一个都要经过cnt个楼层,a[0],a[1],a[2],a[3],a[4],......a[cnt-1],那么对于任意两个楼层a[j ...

  7. UVa 10801 Lift Hopping【floyd 】

    题意:给出n个电梯,每个电梯的运行时间,每个电梯只能在相应的楼层停靠,而且没有楼梯,再给出想去的楼层,问从0层能否到达想去的楼层,求到达的最短时间 建图还是没有建出来--- 因为n<100,可以 ...

  8. HDU 1548 A strange lift (最短路/Dijkstra)

    题目链接: 传送门 A strange lift Time Limit: 1000MS     Memory Limit: 32768 K Description There is a strange ...

  9. uva 10986 - Sending email(最短路Dijkstra)

    题目连接:10986 - Sending email 题目大意:给出n,m,s,t,n表示有n个点,m表示有m条边,然后给出m行数据表示m条边,每条边的数据有连接两点的序号以及该边的权值,问说从点s到 ...

随机推荐

  1. Debian 7 安装 wireshark

    安装过程很简单: $ sudo apt-get install wireshark 其中会弹出一个对话框: ┌─────────────────────┤ Configuring wireshark- ...

  2. Javac 手动编译时,出现乱码或编码格式问题

    使用Javac进行手动编译时,出现乱码或编码格式问题,原因如下:现象:编译时出现乱码或编译错误 即使改成UTF-8仍然会出错 原因如下:某些编辑器会往utf8文件中添加utf8标记(editplus称 ...

  3. 在wifi状态下没有数据线,链接手机调试

    因为不知道是手机的问题还是数据线的问题,经常链接不上adb 所以找了一下wifi情况下,无线跟eclipse链接调试 第一步,首先你需要在你的手机上安装一个终端模拟器工具 第二步,在终端里输入(需要r ...

  4. SIP vs XMPP

    sip和xmpp都是应用层的协议,主要用来在互联网上发送语音和即时通讯IM,rfc3521定义了sip,rfc3920定义了xmpp.xmpp来自即时通讯系统,sip类似语音和视频通信. xmpp协议 ...

  5. 利用HtmlAgilityPack库进行HTML数据抓取

    主要介绍基于XPATH的文本分析方式的实现,代码如下: using System; using System.Collections.Generic; using System.Linq; using ...

  6. TJ/T808 终端通讯协议设计与实现(码农本色)

    由于公司项目涉及到相关技术,对于平常写WEB的技术人员来说对这人来说比较默生:为了让下面的技术人员更好地对这个协议的实施,所以单独针对这个协议进行了分析和设计,以更于后期更好指导相关开发工作.由于自己 ...

  7. 【Java】ThreadLocal细节分析

    ThreadLocal通过中文解释就是线程本地变量,是线程的一个局部变量.根据哲学家黑格尔“的存在即合理”的说法,ThreadLocal的出现肯定是有它的意义,它的出现也是因为多线程的一个产物.Thr ...

  8. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  9. 依据BOM和已经存在的文件生成其他种类的文件

    在BOM中记录中有物料编码,物料名称,物料规格等,而且依据BOM已经生成了一些的文件,如采购规格书,这个时候需要生成相应的检验规格书模板,可以使用下面的VBA代码,具体代码如下: Function I ...

  10. [转]在cocos2d-x中让一个项目适配iphone、iphone retina、ipad、ipad retina四种分辨率

    http://cankeyyin.blog.163.com/blog/static/12336178320124149391202/ 原理:将iphone的hd图片给ipad用,即: 使用原iphon ...