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 ...
随机推荐
- GoF23种设计模式之行为型模式之访问者模式
概述 表示一个作用于某对象结构中的各元素的操作. 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 适用性 1.一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依 ...
- leetcode-4-basic
解题思路:这道题比较简单,代码不贴了.需要注意的是: 数字与字符串之间的转换, char str[100]; sprintf(str, "%d", num); 解题思路: 这道题是 ...
- LeetCode(275)H-Index II
题目 Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimi ...
- CSS预处理器(less 和 sass)
CSS预处理器 1.基于CSS的另一种语言 2.通过工具编译成CSS 3.添加了很多CSS不具备的特性 4.能提升CSS文件的组织 提供功能:1.嵌套 反映层级和约束 2.变量和计算,减少重复戴拿 3 ...
- Python之PyFrameObject动态执行环境
Python虚拟机中的执行环境 Python的虚拟机实际上是在模拟操作系统运行可执行文件的过程,首先,我们先来讲一下普通的x86的机器上,可执行文件是以一种什么方式运行的. 图1-1 图1-1所展示的 ...
- loj2012 「SCOI2016」背单词
-- #include <algorithm> #include <iostream> #include <cstring> #include <cstdio ...
- selenium2.53用45以下的火狐别太高
selenium2.53用45以下的火狐别太高在高的火狐需要selenium3
- python 学习分享-字典篇
python字典(Dictionary) dict是无序的 key必须是唯一切不可变的 a={'key1':'value1','key2':'value2'} 字典的增删改查 a['key3']='v ...
- php 操作excel
<?php $dir=dirname(__FILE__);//查找当前脚本所在路径 require $dir."/db.php";//引入mysql操作类文件 require ...
- 微信小程序开发 -- 设置屏幕亮度
wx.setScreenBrightness(OBJECT) 设置屏幕亮度. OBJECT参数说明: 参数 类型 必填 说明 value Number 是 屏幕亮度值,范围 0~1,0 最暗,1 最亮 ...