https://vjudge.net/problem/UVA-10801

题意:
有多个电梯,每个电梯只能到达指定楼层,每个电梯有速度,如果中途换乘电梯,需要额外加60s,求从0层到达k层的最少时间。

思路:
想了一下知道这是个最短路的问题。

首先我们用邻接矩阵来存储楼层i和j之间的最少时间,此时存储的i到j肯定是一个电梯搭乘上去的,接下来Dijkstra寻找最短路,注意一下寻找最短路时的状态更新。举个例子来说,比如我们第一次找到的最少时间是0~3层,此时更新第3层到别的层数的时间,如果此时不换乘电梯,那么d[3]+G[3][k]=d[k],此时不需要更新。如果换乘电梯,那么需要额外的+60s,此时判断d[3]+G[3][k]+60是否小于d[k]。所以用这样的一个式子就可以来判断是否需要更新状态。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std; const int INF = 0x3f3f3f3f; int n, k;
int t[];
int G[][];
int vis[];
int num[];
int m[]; void graph(int k, int count)
{
for (int i = ; i < count; i++)
for (int j = i + ; j < count; j++)
{
int u = m[i], v = m[j], w = (v - u)*t[k];
if (w<G[u][v])
G[u][v] = G[v][u] = w;
}
return;
} void Dijkstra()
{
memset(vis, , sizeof(vis));
for (int i = ; i <= ; i++)
num[i] = G[][i];
vis[] = ;
num[] = ;
for (int i = ; i < ; i++)
{
int flag = ;
int min = INF;
int u;
for (int k = ; k <= ; k++)
{
if (!vis[k] && num[k] < min)
{
u = k;
min = num[k];
flag = ;
}
}
if (!flag) break;
vis[u] = ;
for (int j = ; j <= ; j++)
{
if (!vis[j] && num[u] + G[u][j] + < num[j])
num[j] = num[u] + G[u][j] + ;
}
}
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> n >> k)
{
memset(G, INF, sizeof(G));
for (int i = ; i < n; i++)
cin >> t[i];
for (int i = ; i < n; i++)
{
int count = ;
while ()
{
scanf("%d", &m[count++]);
char ch = getchar();
if (ch !=' ')
break;
}
graph(i, count);
}
Dijkstra();
if (num[k] == INF)
cout << "IMPOSSIBLE" << endl;
else if (k == )
cout << "" << endl;
else
cout << num[k] << endl;
}
}

UVa 10801 电梯换乘的更多相关文章

  1. UVA 10801 多线程最短路

    题意:一栋摩天大楼从0层到K层,有N部电梯,每个电梯都有自己的运行速度,此外,对于某个电梯来说,并不是每一层都会停,允许在某一层进行电梯换乘,每次换乘固定消耗60秒,最终求从0层去K层的最短时间,如果 ...

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

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

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

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

  4. UVa 10801 Lift Hopping【floyd 】

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

  5. uva 10801(最短路)

    题目大意: 有一层不超过100层的大楼, 有n个电梯,它们的速度都不同. 而且每个电梯只能到达指定的那些楼层,而且它们都有各自的速度(即上升一层或下降一层所用的时间). 如果一个人在某层走出电梯,要换 ...

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

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

  7. UVA 10801 Dij最短路(改模板)

    题意:有n个电梯,目的地是第K层(起点是第0层),给出每个电梯的速度,以及每个电梯能到达的层数,如果中途需要换电梯的话,时间需要+60,求到达目的地的最短时间: 思路:Dij求最短路.如果是另一条路比 ...

  8. UVa 10801 Lift Hopping / floyd

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

  9. UVA 10801 Lift Hopping

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

随机推荐

  1. 通过Tacker将NFV引入OpenStack

    14年的这个时候,我们还在OpenStack社区中为NFV是否属于OpenStack而争论不休.如今这一争议已经被解决了.OpenStack已经成为NFV讨论中的重要部分,正如下面的ETSI MANO ...

  2. react-native run-android error: unknown host service

    D:\rnworkspace\Hello>react-native run-android JS server already running.Running D:\Android\sdk/pl ...

  3. byte处理的几种方法

    /** * 字符串转16进制byte * @param * @return * @throws Exception * @author hw * @date 2018/10/19 9:47 */ pr ...

  4. [LeetCode] 207 Course Schedule_Medium tag: BFS, DFS

    There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...

  5. 表单验证——JqueryValidator、BootstrapValidator

    表单验证两种方式: 1.JqueryValidator <!DOCTYPE html> <html lang="en"> <head> < ...

  6. 全局修改composer源地址

    查看 composer 主目录:通过 composer config -l -g 命令可以列出 composer 的全局配置信息,在这些信息中查找 [home] 配置项就是 composer 的主目录 ...

  7. hdu4991 树状数组+dp

    这题说的是给了一个序列长度为n 然后求这个序列的严格递增序列长度是m的方案有多少种,如果用dp做那么对于状态有dp[n][m]=dp[10000][100],时间复杂度为n*m*n接受不了那么想想是否 ...

  8. za

    http://www.szjs.gov.cn/bsfw/zdyw_1/zfbz/jgcx/

  9. Linux基础命令---resizefs

    resize2fs 调整ext2\ext3\ext4文件系统的大小,它可以放大或者缩小没有挂载的文件系统的大小.如果文件系统已经挂载,它可以扩大文件系统的大小,前提是内核支持在线调整大小. size参 ...

  10. Linux基础命令---service

    service service可以控制系统服务(打开.关闭.重启).service在尽可能可预测的环境中运行SystemV init脚本,删除大多数环境变量并将当前工作目录设置为根目录.脚本参数位于“ ...