题意:

有个n*m的滑雪场,bessie要从(1,1)滑到(n,m),问最小时间。

起始有一个速度v,然后每从一个点A到一个点B(仅仅能上下左右走,每次一格),速度就会乘上2^(权值A-权值B)。

然后每次移动的耗时是当前速度的倒数。

题解:

分析一下就能发现,乘乘除除后,从一个点出发时的速度都是固定的,即与从起点直接到该点的速度是一致的,那么我们就能够建成一个边权固定的无向图了,当然,A->B和B->A的距离基本不可能相等。

这道题非常坑,首先就是数据范围非常大,须要#define inf 999999999999.99

然后就是错了的话注意C++和G++都交交,然后各种输出.2f和.2lf啊神马的。

然后TLE了最好还是多写个几行代码加个pq优化。

就这些,事实上我还TLE这呢,实在是拍不出来错误,受不了了,交了个网上代码,可是我仍然要把我的代码贴一份,以助各位理解,毕竟代码风格不错。

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 105
#define NN 10100
#define M 80000
#define inf 999999999999.99
#define eps 1e-6
using namespace std;
const int dx[4]={0,0,1,-1};
const int dy[4]={1,-1,0,0};
struct KSD
{
int v,next;
double len;
}e[M];
int head[NN],cnt;
void add(int u,int v,double len)
{
cnt++;
e[cnt].v=v;
e[cnt].len=len;
e[cnt].next=head[u];
head[u]=cnt;
}
int id[N][N],num;
int n,m;
int map[N][N];
double speed[N][N],p;
int power(int x,int p)
{
int ret=1;
while(p)
{
if(p&1)ret*=x;
x*=x;
p>>=1;
}
return ret;
}
double dist[NN];
bool in[NN];
struct Lux
{
double f;
int v;
Lux(double _f,int _v):f(_f),v(_v){}
Lux(){}
bool operator < (const Lux &a)const
{return f<a.f;}
};
double spfa(int s,int t)
{
int i,u,v;
priority_queue<Lux>q;
for(i=s;i<=t;i++)dist[i]=inf;
dist[s]=0;
in[s]=1;
q.push(Lux(0,s));
while(!q.empty())
{
Lux U=q.top();
q.pop();
u=U.v;
in[u]=0;
for(i=head[u];i;i=e[i].next)
{
v=e[i].v;
if(dist[v]>dist[u]+e[i].len+eps)
{
dist[v]=dist[u]+e[i].len;
if(!in[v])
{
in[v]=1;
q.push(Lux(dist[v],v));
}
}
}
}
return dist[t];
}
int main()
{
// freopen("test.in","r",stdin);
int i,j,k;
int a,b,c;
int x,y,nid;
scanf("%lf%d%d",&p,&n,&m);p=1.0/p;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)
{
id[i][j]=++num;
scanf("%d",&map[i][j]);
if(map[i][j]>=map[1][1])speed[i][j]=p*power(2,map[i][j]-map[1][1]);
else speed[i][j]=p/(double)power(2,map[1][1]-map[i][j]);
}
for(i=1;i<=n;i++)for(j=1;j<=m;j++)
{
nid=id[i][j];
for(k=0;k<4;k++)
{
x=i+dx[k];
y=j+dy[k];
if(!id[x][y])continue;
add(nid,id[x][y],speed[i][j]);
}
}
printf("%.2f\n",spfa(1,n*m));
return 0;
}

【POJ3037】Skiing 最短路的更多相关文章

  1. POJ3037 Skiing

    Skiing 题目大意: 给定一个M*N的网格,已知在每个网格中的点可以向上下左右四个方向移动一个单位,每个点都有一个高度值. 从每个点开始移动时存在一个速度值,从A点移动到B点,则此时B点的速度为& ...

  2. poj练习题的方法

    poj1010--邮票问题 DFSpoj1011--Sticks dfs + 剪枝poj1020--拼蛋糕poj1054--The Troublesome Frogpoj1062--昂贵的聘礼poj1 ...

  3. Skiing(最短路)

    poj——3037 Skiing Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4921   Accepted: 1315 ...

  4. POJ 3037 Skiing(如何使用SPFA求解二维最短路问题)

    题目链接: https://cn.vjudge.net/problem/POJ-3037 Bessie and the rest of Farmer John's cows are taking a ...

  5. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  6. 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 ...

  7. 最短路&查分约束

    [HDU] 1548 A strange lift 根蒂根基最短路(或bfs)★ 2544 最短路 根蒂根基最短路★ 3790 最短路径题目 根蒂根基最短路★ 2066 一小我的观光 根蒂根基最短路( ...

  8. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

  9. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

随机推荐

  1. C和指针 (pointers on C)——第十一章:动态内存分配(下)习题

    1.编写calloc,内部用malloc. void *calloc (size_t n, size_t size) { char * memory; memory =(char*) malloc(n ...

  2. linux 使用外部设备的(光盘) 安装和更新库

    1. 安装光盘(文件夹不存在,创建) mount -t auto /dev/cdrom /mnt/cdrom 2. 更改索引文件,指定读取本地文件 vi /etc/yum.repos.d/CentOS ...

  3. sun.misc.BASE64Encoder我找不到jar一揽子解决方案

    1.合适的项目 --> 属性(Properties) --> java bulid path --> Libraries -> jre System Library(点加号在前 ...

  4. 博客搬到了http://xianglong.me

    自己用Django建立个人博客.这个博客的部分已经迁移到新的个人博客. 博客地址:龙 (http://xianglong.me),欢迎. 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  5. Python 提取Twitter转发推文的元素(比方username)

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-24 @author: guaguastd @name: e ...

  6. CentOS7 安装spark集群

    Spark版本 1.6.0 Scala版本 2.11.7 Zookeeper版本 3.4.7 配置虚拟机 3台虚拟机,sm,sd1,sd2 1. 关闭防火墙 systemctl stop firewa ...

  7. NSIS:使用PassDialog插件实现密码安装(卸载)功能

    原文 NSIS:使用PassDialog插件实现密码安装(卸载)功能 有时,出于特殊的需求,我们要给安装或卸载程序加一个密码,只有输入了正确的密码才可以继续.比如: 下面我们使用插件来实现安装密码: ...

  8. ThreadLocal是否会引发内存泄露的分析(转)

    这篇文章,主要解决一下疑惑: 1. ThreadLocal.ThreadLocalMap中提到的弱引用,弱引用究竟会不会被回收? 2. 弱引用什么情况下回收? 3. JAVA的ThreadLocal和 ...

  9. (大数据工程师学习路径)第二步 Vim编辑器----Vim文档编辑

    一.vim重复命令 1.重复执行上次命令 在普通模式下.(小数点)表示重复上一次的命令操作 拷贝测试文件到本地目录 $ cp /etc/protocols . 打开文件进行编辑 $ vim proto ...

  10. JSP简单的练习-使用JDOM阅读xml文件

    <%@ page contentType="text/html; charset=gb2312" language="java" %> <%@ ...