UVA-10801 Lift Hopping (最短路)
题目大意及分析:一道简单的最短路。。。好几天没写程序了,憋得难受!!!
代码如下:
# include<iostream>
# include<cstdio>
# include<cstring>
# include<vector>
# include<queue>
# include<algorithm>
using namespace std; const int INF=1<<30; struct Edge
{
int to,w,nxt;
};
Edge G[35000];
int a[5][105],n,t;
int v[5],head[505],cnt;
int d[505]; bool read(int &val)
{
val=0;
char c;
while(c=getchar()){
if(c=='\n') return false;
else if(c==' ') return true;
else val=val*10+c-'0';
}
} void addEdge(int fr,int to,int w)
{
G[cnt].to=to;
G[cnt].w=w;
G[cnt].nxt=head[fr];
head[fr]=cnt++; G[cnt].to=fr;
G[cnt].w=w;
G[cnt].nxt=head[to];
head[to]=cnt++;
} int spfa()
{
fill(d,d+500,INF);
queue<int>q;
for(int i=0;i<500;i+=100){
d[i]=0;
q.push(i);
}
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=head[u];i!=-1;i=G[i].nxt){
int nu=G[i].to;
if(d[nu]>d[u]+G[i].w){
d[nu]=d[u]+G[i].w;
q.push(nu);
}
}
}
int res=INF;
for(int i=0;i<500;i+=100)
res=min(res,d[t+i]);
return res;
} int main()
{
while(~scanf("%d%d",&n,&t))
{
for(int i=0;i<n;++i) scanf("%d",v+i);
cnt=0;
memset(head,-1,sizeof(head));
getchar();
for(int i=0;i<n;++i){
a[i][0]=0;
int val;
while(read(val))
{
a[i][++a[i][0]]=val;
}
a[i][++a[i][0]]=val;
}
for(int i=0;i<n;++i)
for(int j=1;j<=a[i][0];++j)
for(int k=j+1;k<=a[i][0];++k)
addEdge(i*100+a[i][j],i*100+a[i][k],(a[i][k]-a[i][j])*v[i]);
for(int i=0;i<100;++i)
for(int j=0;j<500;j+=100)
for(int k=j+100;k<500;k+=100)
addEdge(i+j,i+k,60);
int ans=spfa();
if(ans==INF)
printf("IMPOSSIBLE\n");
else printf("%d\n",ans);
}
return 0;
}
UVA-10801 Lift Hopping (最短路)的更多相关文章
- uva 10801 - Lift Hopping(最短路Dijkstra)
/* 题目大意: 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 问从第0层楼到第k层最少经过多长时间到达! 思路:明显的Dijkstra , ...
- UVA 10801 Lift Hopping 最短路
2种方式直接代码就可以了.注意首次不需要60S的转换 #include <map> #include <set> #include <list> #include ...
- UVA 10801 Lift Hopping 电梯换乘(最短路,变形)
题意: 有n<6部电梯,给出每部电梯可以停的一些特定的楼层,要求从0层到达第k层出来,每次换乘需要60秒,每部电梯经过每层所耗时不同,具体按 层数*电梯速度 来算.问经过多少秒到达k层(k可以为 ...
- UVa 10801 - Lift Hopping(dijkstra最短路)
根据题意,以每一层楼为顶点,每个电梯可以到达的两层楼之间的秒数为每一条边的权值,以此构建一个无向图.然后利用dijkstra求出最短的时间,注意每次换乘电梯需要等待60s(因为同一个电梯上的楼层是相互 ...
- UVa 10801 Lift Hopping (Dijkstra)
题意:有一栋100层的大楼(标号为0~99),里面有n个电梯(不超过5个),以及要到达的层数(aid),然后是每个电梯走一层所需的时间, 再n行就是对应每个电梯可以到达的层数,数量不定.然后每装换一次 ...
- 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,可以 ...
- 紫书 习题 11-7 UVa 10801 (单源最短路变形)
把每个电梯口看作一个节点, 然后计算边的权值的时候处理一下, 就ok了. #include<cstdio> #include<vector> #include<queue ...
- UVA 11248 - Frequency Hopping(网络流量)
UVA 11248 - Frequency Hopping 题目链接 题意:给定一个网络,如今须要从1到N运输流量C,问是否可能,假设可能输出可能,假设不可能,再问能否通过扩大一条边的容量使得可能,假 ...
随机推荐
- ubuntu下安装运行colmap
从源码安装 colmap可以在主流的系统windows,mac,linux安装 从github上获取colmap的最新源码 git clone https://github.com/colmap/co ...
- jquery ztree 刷新后记录折叠、展开状态
ztree :http://www.ztree.me/v3/main.php 项目中用到了这个插件,刚好也有需求 在页面刷新后,保存开始的展开.折叠状态, 其实 dtree: http://www.d ...
- html/css实现文字自动换行,超出部分出现(...)
PS:这是我在别人博客copy下来的 做前端的我们都会发现这样一个问题,当你控制文字出现多行时,而这多行是有限制的(比如超出部分隐藏不显示),而这多行文字如果全部是数字或者字母抑或是数字和字母的组合时 ...
- MySQL 数据库的主从配置
mysql主从配置.鄙人是在如下环境测试的: 主数据库所在的操作系统:win7 主数据库的版本:5.0 主数据库的ip地址:192.168.1.111 从数据库所在的操作系统:linux 从数据的版本 ...
- MDF文件损坏,如何恢复?(未解决)
MDF文件损坏,如何恢复?MDF附加失败,数据库附加失败 1.附加时 2.用替换法设置后重建日志 (其实已经删掉日志了,确保操作之前没有日志,但是运行 alter database [test] Re ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课
centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...
- [RGEOS]空间拓扑关系
-1.判断两个线段是否平行 inline bool parallel_seg_seg(Segment_2 S1, Segment_2 S2) { Vector_2 u(S1); Vector_2 v( ...
- HDFS的Java API
HDFS Java API 可以用于任何Java程序与HDFS交互,该API使我们能够从其他Java程序中利用到存储在HDFS中的数据,也能够使用其他非Hadoop的计算框架处理该数据 为了以编程方式 ...
- PAT 1132 Cut Integer[简单]
1132 Cut Integer(20 分) Cutting an integer means to cut a K digits lone integer Z into two integers o ...