UVa 10801 - Lift Hopping(dijkstra最短路)
根据题意,以每一层楼为顶点,每个电梯可以到达的两层楼之间的秒数为每一条边的权值,以此构建一个无向图。然后利用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最短路)的更多相关文章
- UVa 10801 Lift Hopping (Dijkstra)
题意:有一栋100层的大楼(标号为0~99),里面有n个电梯(不超过5个),以及要到达的层数(aid),然后是每个电梯走一层所需的时间, 再n行就是对应每个电梯可以到达的层数,数量不定.然后每装换一次 ...
- uva 10801 - Lift Hopping(最短路Dijkstra)
/* 题目大意: 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 问从第0层楼到第k层最少经过多长时间到达! 思路:明显的Dijkstra , ...
- UVA 10801 Lift Hopping 电梯换乘(最短路,变形)
题意: 有n<6部电梯,给出每部电梯可以停的一些特定的楼层,要求从0层到达第k层出来,每次换乘需要60秒,每部电梯经过每层所耗时不同,具体按 层数*电梯速度 来算.问经过多少秒到达k层(k可以为 ...
- UVA 10801 Lift Hopping 最短路
2种方式直接代码就可以了.注意首次不需要60S的转换 #include <map> #include <set> #include <list> #include ...
- UVa 10801 Lift Hopping / floyd
乘电梯 求到目标层的最短时间 有n个电梯 换一个电梯乘需要额外60秒 所以建图时每个电梯自己能到的层数先把时间算好 这是不需要60秒的 然后做floyd时 如果松弛 肯定是要换电梯 所以要加60秒 # ...
- UVA 10801 Lift Hopping
算是一道需要动脑筋的最短路问题了,关键在于建图部分,对于n个电梯中每一个都要经过cnt个楼层,a[0],a[1],a[2],a[3],a[4],......a[cnt-1],那么对于任意两个楼层a[j ...
- UVa 10801 Lift Hopping【floyd 】
题意:给出n个电梯,每个电梯的运行时间,每个电梯只能在相应的楼层停靠,而且没有楼梯,再给出想去的楼层,问从0层能否到达想去的楼层,求到达的最短时间 建图还是没有建出来--- 因为n<100,可以 ...
- UVA-10801 Lift Hopping (最短路)
题目大意及分析:一道简单的最短路...好几天没写程序了,憋得难受!!! 代码如下: # include<iostream> # include<cstdio> # includ ...
- Dijkstra最短路算法
Dijkstra最短路算法 --转自啊哈磊[坐在马桶上看算法]算法7:Dijkstra最短路算法 上节我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最 ...
随机推荐
- HDU 5957 Query on a graph
HDU 5957 Query on a graph 2016ACM/ICPC亚洲区沈阳站 题意 \(N(N \le 10^5)\)个点,\(N\)条边的连通图. 有\(M \le 10^5\)操作: ...
- 1-1 Java简介
主要内容: <1>Java平台应用 <2>核心概念:JVM.JDK.JRE <3>搭建Java开发环境 <4>使用工具开发Java程序 <5> ...
- 黑马程序员——JAVA基础之基本数据类型包装类和1.5JDK新特性装箱
------- android培训.java培训.期待与您交流! ---------- 基本数据类型包装类: byte Byte short Short int Integer char Charac ...
- __LINE__ __DATE__ __FILE__ __TIME__ 等宏定义解释
Names the predefined ANSI C and Microsoft C++ implementation macros. The compiler recognizes predefi ...
- Abdicate
每次,打开背单词软件,背诵单词时,A打头的单词,第一个,永远会是 Abdicate,放弃,抛弃. 真是有意思. 想想在学习js高级程序设计一书时,一横心,决心手动输入书中出现过的每一个代码片段示例. ...
- jQuery.form.js使用
jQuery.form.js是一个form插件,支持ajax表单提交和ajax文件上传. 下载地址 百度云:http://pan.baidu.com/s/1eQoYE46 360云:http://yu ...
- C数据类型
结构体 因为数组中各元素的类型和长度都必须一致,以便于编译系统处理.为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”.它相当于其它高级语言中的记录.“ ...
- docker 镜像的保存以及导入
docker 镜像的保存 docker save -o davename.tar images docker 镜像的导入 docker import - importname < tar ...
- no ocijdbc11 in java.library.path linux
no ocijdbc11 in java.library.path linux vi /etc/profile export ORACLE_HOME=/oracle/database/oracle/p ...
- asp.net中virtual和abstract的区别分析
这篇文章主要介绍了asp.net中virtual和abstract的区别,较为详细的分析了virtual与abstract的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...