题目大意及分析:一道简单的最短路。。。好几天没写程序了,憋得难受!!!

代码如下:

# 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 (最短路)的更多相关文章

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

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

  2. UVA 10801 Lift Hopping 最短路

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

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

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

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

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

  5. UVa 10801 Lift Hopping (Dijkstra)

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

  6. UVa 10801 Lift Hopping / floyd

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

  7. UVA 10801 Lift Hopping

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

  8. UVa 10801 Lift Hopping【floyd 】

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

  9. 紫书 习题 11-7 UVa 10801 (单源最短路变形)

    把每个电梯口看作一个节点, 然后计算边的权值的时候处理一下, 就ok了. #include<cstdio> #include<vector> #include<queue ...

  10. UVA 11248 - Frequency Hopping(网络流量)

    UVA 11248 - Frequency Hopping 题目链接 题意:给定一个网络,如今须要从1到N运输流量C,问是否可能,假设可能输出可能,假设不可能,再问能否通过扩大一条边的容量使得可能,假 ...

随机推荐

  1. ubuntu下安装meshlab

    PPA 安装,打开终端,输入以下命令: sudo add-apt-repository ppa:zarquon42/meshlab sudo apt-get update sudo apt-get i ...

  2. 虚拟机中CentoOs配置ip且连网

    1.修改"VMware Network Adapter VMnet8",配置IP 2.打开虚拟机,"编辑" => "虚拟网络编辑器", ...

  3. 棋盘游戏---hdu1281(最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281   题目大意:就是车和车之间不能发生攻击.还有一部分位置不可以放置棋子.   解题思路:一行一列 ...

  4. 迁移学习与fine-tuning有什么区别

    假设你要处理一个新数据集,让你做图片分类,这个数据集是关于Flowers的,问题是,数据集中flower的类别很少,数据集中的数据也不多,你发现从零开始训练CNN的效果很差,很容易过拟合,怎么办呢,于 ...

  5. (windows下)tomcat优化--内存,并发.缓存三方面优化

    一.内存 注: jdk1.8中废弃了-XX:PermSize和-XX:MaxPermSize的持久态(存放常量.静态变量区)配置, 多了一个元数据区(Metadata Space:默认为内存的0.2% ...

  6. sql小知识

    1:查询某一段落内的几条数据,按时间降序. LIMIT 5,10; //检索记录行6-15 2:创建视图,  查询出某些类别的数据,保存在视图中.  || 的优先级高于and ) ); 3:  查询出 ...

  7. Centos7 Zabbix3.2安装

    实验环境: 阿里云 [zabbix@miyan ~]$ cat /etc/redhat-release CentOS Linux release (Core) 不得不说,官方文档确实强大 1.官方文档 ...

  8. openSession()与getCurrentSession()的区别

    getCurrentSession创建的session会和绑定到当前线程,而openSession不会. getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSes ...

  9. cocos-lua基础学习(八)Layer类学习笔记

    创建 local layer = cc.Layer:create() local layer1 = cc.LayerColor:create(cc.c4b(192, 0, 0, 255), s.wid ...

  10. selenium 中装饰器作用

    前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间.于是就想是不是可以只打开一 ...