根据题意,以每一层楼为顶点,每个电梯可以到达的两层楼之间的秒数为每一条边的权值,以此构建一个无向图。然后利用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. 多线程问题(JVM重排序)

    public class Test3 { private static boolean ready; private static int Number; private static class R ...

  2. Android——ListView

    1.ArryAdapter: arry_adapter的layout文件: <?xml version="1.0" encoding="utf-8"?&g ...

  3. mysql数据库从库同步延迟的问题

    在从服务器上执行show slave status;可以查看到很多同步的参数,我们需要特别注意的参数如下,希望文章对各位会有所帮助. 在从服务器上执行show slave status;可以查看到很多 ...

  4. Git连接Github

    环境:Ubuntu Server 12.04 安装Git apt-get install git git-core 配置本机Git git config --global user.name &quo ...

  5. 错误:无法访问android.app.Activity 找不到android.app.Activity的类文件

    视频里面在工程ndk22/bin/classes中 运行javah  com.cn.ndk22.Ndk22.Activity ,出现了.h文件 但是我在bin/classes目录中运行javah 时出 ...

  6. javascrip中的confirm小技巧

    jsp页面中的一个标签: <a href="javascript:void(0)" onclick="confirmDelete('<%=request.ge ...

  7. JSON的转换(将JSON转换为字符串,将字符串转化为JSON)

    eval()和JSON.stringify()   1.eval用于从一个字符串中解析出json 对象,创建包含 JSON 语法的 JavaScript 字符串.例如 var str = '{ &qu ...

  8. NodeJS记录

    https://nqdeng.github.io/7-days-nodejs/#3.3.4

  9. 论文阅读之 DECOLOR: Moving Object Detection by Detecting Contiguous Outliers in the Low-Rank Representation

    DECOLOR: Moving Object Detection by Detecting Contiguous Outliers in the Low-Rank Representation Xia ...

  10. kvo-观察者-iOS

    #import <Foundation/Foundation.h> @interface Child : NSObject @property (nonatomic,assign) int ...