Skiing(最短路)
| Time Limit: 1000MS | Memory Limit: 65536K | |||
| Total Submissions: 4921 | Accepted: 1315 | Special Judge | ||
Description
Bessie starts out travelling at a initial speed V (1 <= V <= 1,000,000). She has discovered a remarkable relationship between her speed and her elevation change. When Bessie moves from a location of height A to an adjacent location of eight B, her speed is multiplied by the number 2^(A-B). The time it takes Bessie to travel from a location to an adjacent location is the reciprocal of her speed when she is at the first location.
Find the both smallest amount of time it will take Bessie to join her cow friends.
Input
* Lines 2..R+1: C integers representing the elevation E of the corresponding location on the grid.
Output
Sample Input
1 3 3 1 5 3 6 3 5 2 4 3
Sample Output
29.00
Hint
Start at 1,1 time 0 speed 1
East to 1,2 time 1 speed 1/16
South to 2,2 time 17 speed 1/4
South to 3,2 time 21 speed 1/8
East to 3,3 time 29 speed 1/4
滑雪
时间限制:1000MS内存限制:65536k
总提交:4921接受:1315特别法官
描述
Bessie和其他农场主约翰的母牛今年冬天要去滑雪。有一天,贝西发现自己在左上角的R(1 25 = R = = 100)由C(1 = C = C =)网格海拔E(-电子= 25)。为了加入FJ在discow党的其他牛,她必须到右下角,很快她可以通过旅行只有北,南,东,西。
Bessie以初始速度V开始旅行(1 < V = V = 1000000)。她发现她的速度和海拔变化之间有着显著的关系。当Bessie从一个高度位置八B相邻的位置,她的速度乘以2号^(A-B)。Bessie从一个地点到另一个地点旅行的时间是她在第一个位置时速度的倒数。
找到两个最小的时间将采取贝茜加入她的牛朋友。
输入
*第1行:三个空间分离的整数:V,R和C,分别代表Bessie的初始速度和网格中的行和列的数目。
*行2 + R + 1:C整数表示网格上的相应位置的海拔E。
输出
一个单数值,打印到两个完全小数的位置:Bessie可以到达网格右下角的最小时间。
样本输入
1 3 3
1 5 3
6 3 5
2 4 3
示例输出
二十九
提示
Bessie的最佳路线是:
开始时1时0速度1
东到1,2时间1速度1 / 16
南至2时间17速度1 / 4
南至3,2时间21速度1 / 8
东3时间29速度1 / 4
源
usaco 2005十月黄金
首先我们需要证明的是从左上角出发到R*C网格中其他任意一点的速度都是固定的.对于下面的矩阵:
1 5 3
6 3 5
2 4 3
我们想计算到数值为6的点时的速度? 从1->6的话 v6=v1*2^(1-6)
而从1->5 5->3 3->6 的话 v6=v1*2^(1-5) * 2^(5-3) * 2^(3-6)=v1*2^(1-6)
相等,同理我们可以证明到任意点的速度为:
v(i,j)= v1*2^(1号点与该点的海拔之差)
既然任意点的速度都是固定的,那么从该点到它的4个方向的边的时间开销也是固定的.
直接建立该无向图,计算出对应每条边的时间开销,然后用最短路算法计算从0号节点到R*C-1点的最短距离(时间开销)即可.
过程中注意将该网格转换为一个节点编号的无向图的方法.
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 105
#define maxn 9000000000//妈的,极大值开小了,卡了我一个多小时!交了6遍一直wa
using namespace std;
int n,m,v,a[N][N];
double dis[N][N];
bool vis[N][N];
]={-,,,},y[]={,,,-};
struct Node
{
int x,y;
double t,v;
Node (int x,int y,double t,double v)
{
this->x=x;
this->y=y;
this->t=t;
this->v=v;
}//结构体的初始化,只能在第一次调用结构体的时候使用
friend bool operator < (Node a,Node b)
{
if(a.t==b.t)
return a.v<b.v;
return a.t>b.t;
}// operator重载运算符,只要调用到该结构体,就会按照结构体中重新定义的<进行操作。
};
void dijsktra()
{
priority_queue<Node> q;
q.push(Node(,,,v));
while(!q.empty())
{
Node p=q.top();
q.pop();
if(vis[p.x][p.y]) continue;
vis[p.x][p.y]=;
;i<;i++)
{
int xx=p.x+x[i];//向四个方向扩展该店的路径 ,可看成横坐标。
int yy=p.y+y[i];//向四个方向扩展该点的路径,可看成纵坐标。
||xx>n||yy<||yy>m) continue;//若要扩展的点超出了这个网格的范围,略过。
if(vis[xx][yy]) continue;//若该点已经访问过,略过。
if(dis[xx][yy]>p.t+1.0/p.v)//求最短路!term.t原就消耗的时间,1.0/term.v 到该点的时间。
{
dis[xx][yy]=p.t+1.0/p.v;
q.push(Node(xx,yy,dis[xx][yy],p.v*pow(2.0,a[p.x][p.y]-a[xx][yy])));
//继续扩展
}
}
}
}
int main()
{
while(scanf("%d%d%d",&v,&n,&m)!=EOF)//有好几组数据!!
{
;i<=n;i++)
;j<=m;j++)
{
scanf("%d",&a[i][j]);
dis[i][j]=maxn;//初始化,边放数边初始,比起先两个for循环初始较快
}
memset(vis,,sizeof(vis));
dis[][]=;//由于是从四方格的最左上角开始走,那样到该点的时间一定是0;
dijsktra();
printf("%.2f\n",dis[n][m]);//到达最后右下角所用的时间。
}
;
}
Skiing(最短路)的更多相关文章
- 【POJ3037】Skiing 最短路
题意: 有个n*m的滑雪场,bessie要从(1,1)滑到(n,m),问最小时间. 起始有一个速度v,然后每从一个点A到一个点B(仅仅能上下左右走,每次一格),速度就会乘上2^(权值A-权值B). 然 ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- POJ 3037 Skiing(如何使用SPFA求解二维最短路问题)
题目链接: https://cn.vjudge.net/problem/POJ-3037 Bessie and the rest of Farmer John's cows are taking a ...
- POJ - 3037 Skiing SPFA
Skiing Bessie and the rest of Farmer John's cows are taking a trip this winter to go skiing. One day ...
- 最短路&查分约束
[HDU] 1548 A strange lift 根蒂根基最短路(或bfs)★ 2544 最短路 根蒂根基最短路★ 3790 最短路径题目 根蒂根基最短路★ 2066 一小我的观光 根蒂根基最短路( ...
- bzoj1001--最大流转最短路
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...
- 【USACO 3.2】Sweet Butter(最短路)
题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...
- Sicily 1031: Campus (最短路)
这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...
- 最短路(Floyd)
关于最短的先记下了 Floyd算法: 1.比较精简准确的关于Floyd思想的表达:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设maz ...
随机推荐
- (转)iOS获取设备型号
//获得设备型号 + (NSString *)getCurrentDeviceModel:(UIViewController *)controller { ]; size_t len; char *m ...
- 【原创】关于高版本poi autoSizeColumn方法异常的情况
之前使用的3.9版本,autoSizeColumn方法一切正常,现在切换到了3.15版本这个方法就出先了问题,问题如下,无法自动追踪所有的列. Exception in thread "ma ...
- LINQ to SQL和Entity Framework对比与关联
LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在于EF对数据库架构和我们查询的类型实行了更好的解耦.使用EF,我们查询的对象不再 ...
- 查找最小的k个元素 【微软面试100题 第五题】
题目要求: 输入n个整数,输出其中最小的k个. 例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4. 参考资料:剑指offer第30题. 题目分析: 解法一: 用快排 ...
- curl 设置头部
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ...
- 测试openssl_encrypt
<?php //$string = 'It works ? Or not it works ?'; //$pass = '1234'; //$method = 'aes128'; // // / ...
- hdu6098[RMQ+筛法] 2017多校6
/*hdu6098[RMQ+筛法] 2017多校6*/ #include <bits/stdc++.h> using namespace std; ][], len[], a[]; voi ...
- C++之Effective STL学习笔记Item14
使用reserve来避免不必要的重新分配! The reserve member function allows you to minimize the number ofreallocations ...
- 【bzoj4026】dC Loves Number Theory 可持久化线段树
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...