根据题意,以每一层楼为顶点,每个电梯可以到达的两层楼之间的秒数为每一条边的权值,以此构建一个无向图。然后利用dijkstra求出最短的时间,注意每次换乘电梯需要等待60s(因为同一个电梯上的楼层是相互可达的,所以我们只有通过另外一个电梯找到了更小的搭乘时间时候我们才会执行松弛操作),因此每转一个定点需要加60s时间(注意初始定点不需要60s的等待)。

#include <bits/stdc++.h>
using namespace std; const int INF=0x3f3f3f3f; const int MAXN= + ; int speed[MAXN],floors[MAXN];//输入数据,
int w[MAXN][MAXN],d[MAXN];//w是各点的权值 d是0到任意点的路径
bool vis[MAXN];//vis是是否走过
int n,k,num; void buildG(int ss)
{
for (int i=; i<num; i++)
{
for (int j=i+; j<num; j++)
{ //通过楼之差乘时间,求权值,取最短
int dis=abs(floors[i]-floors[j])*speed[ss]; //因为是双向的,所以如此建图
if (dis<w[floors[i]][floors[j]])
w[floors[i]][floors[j]]=w[floors[j]][floors[i]]=dis; }
} } //dij算法
void dijk()
{
memset(vis,,sizeof(vis)); for (int i=; i<; i++)
{
d[i]=i==?:INF;
} for (int i=; i<; i++)
{
int x,m=INF;
for(int y=; y<; y++)
{
if (!vis[y]&&d[y]<m)
{
m=d[x=y];
}
} vis[x]=true; for (int y=; y<; y++)
{
if (d[y]>d[x]+w[x][y]+)
{
d[y]=d[x]+w[x][y]+;
}
} }
if (d[k]==INF)
{
printf("IMPOSSIBLE\n");
}
else
{
if (k==)
puts("");
else
printf("%d\n",d[k]-);
} } int main()
{
while(~scanf("%d%d",&n,&k))
{
memset(w,INF,sizeof(w));
for (int i=; i<n; i++)
{
scanf("%d",&speed[i]);
} for (int i=; i<n; i++)
{
num=; //注意输入,这样处理很好,要借鉴
while(true)
{
scanf("%d",&floors[num++]);
if (getchar()=='\n')
break;
}
buildG(i);
}
dijk();
} return ;
}

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

  1. UVa 10801 Lift Hopping (Dijkstra)

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

  2. uva 10801 - Lift Hopping(最短路Dijkstra)

    /* 题目大意: 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 问从第0层楼到第k层最少经过多长时间到达! 思路:明显的Dijkstra , ...

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

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

  4. UVA 10801 Lift Hopping 最短路

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

  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. UVA-10801 Lift Hopping (最短路)

    题目大意及分析:一道简单的最短路...好几天没写程序了,憋得难受!!! 代码如下: # include<iostream> # include<cstdio> # includ ...

  9. Dijkstra最短路算法

    Dijkstra最短路算法 --转自啊哈磊[坐在马桶上看算法]算法7:Dijkstra最短路算法 上节我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最 ...

随机推荐

  1. 如何卸载rpm包

    首先通过  rpm -q <关键字> 可以查询到rpm包的名字 然后 调用 rpm -e <包的名字> 删除特定rpm包 如果遇到依赖,无法删除,使用 rpm -e --nod ...

  2. 4-3 yum命令

    1.常用yum命令 <1>查询 yum list #查询所有可用软件包列表(以 包名 - 版本 - yum源所在名称 格式显示) yum search 关键字 #搜索服务器上所有和关键字相 ...

  3. Redis 源码解析

    http://programmers.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness- ...

  4. JAVA Lambda Expressions streams

    http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html https:// ...

  5. js字符串函数

    JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...

  6. Oracle数据库——用户、方案的创建与管理

    一.涉及内容 1.掌握用户.方案与权限的基本概念. 2.熟练掌握用户操作的相关命令. 二.具体操作 (一)选择题: 1.关于方案的描述下列哪一项不正确?(C) A.表或索引等对象一定属于某一个方案 B ...

  7. pam

    http://www.linux-pam.org/ sag(the linux-pam system administrators' guide)翻译(以下是网上别人的翻译,参考一下) http:// ...

  8. 用Javascript弹出div定义的消息框并往块里面填写文字

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. asp.net中virtual和abstract的区别分析

    这篇文章主要介绍了asp.net中virtual和abstract的区别,较为详细的分析了virtual与abstract的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...

  10. linux系统下搭建php环境之-Discuz论坛

    1.安装搭建论坛必要的软件 apache php mysql CentOS系统我们可以直接使用 yum install 的方式进行软件安装,腾讯云有提供软件安装源,是同步CentOS官方的安装源,包涵 ...