题意:

有个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. 金蝶K3管理软件PDA条码解决方式,盘点机与金蝶K3无缝对接

    申明:以上文字为"武汉汉码科技有限公司"原创,转载时务必注明出处. 技术分享,沟通你我,共同进步!www.hanma-scan.com 原帖:http://www.hanma-sc ...

  2. 使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包

    之前一直都没涉及到打包安装方面的东西,都是另一个同事负责的,使用的工具(installshield)也比较高大上一点,可是后来他离职以后接受的同事也只能是在这个基础上做个简单的配置,然后打包,可是现在 ...

  3. 朝花夕拾-4-shell

    引言 shell,我们常常会用到,以其强大的功能,会帮助我们解决非常多棘手的问题.近期遇到一个问题,要跑非常多case,假设串行的执行,须要非常久.能不能让他们并行起来,但又不能全部case都并行执行 ...

  4. 王立平--android特权

    //同意应用程序访问和更改checkin数据库"properties"数据表 android.permission.ACCESS_CHECKIN_PROPERTIES //同意应用 ...

  5. iOS发展系列II - UILabel 使用摘要

    // 初始化标签 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 300, 150)]; // 设置标签文字 l ...

  6. 酒旗少年狂暖风,至0基本的前端开发project教师们学习计划

    酒旗风暖少年狂,为0基础前端开发project师做学习计划 夜幕降暂时.走到一张废弃已久的书桌前,打开台灯,看到书桌上已经布满灰尘,而桌上的那盆羸弱的文竹已经枝繁叶茂.我擦干净了桌面,坐了下来,把买回 ...

  7. Linux内核导出符号宏定义EXPORT_SYMBOL源代码分析

    资源: <include/linux/moudule.h> --. #ifndef MODULE_SYMBOL_PREFIX #define MODULE_SYMBOL_PREFIX &q ...

  8. OUC_OptKernel_oshixiaoxiliu_好题推荐

    poj1112 Team Them Up! 补图二分图+dp记录路径codeforces 256A Almost Arithmetical Progression dp或暴力 dp[i][j] = d ...

  9. ABP领域层——仓储(Repositories)

    ABP领域层——仓储(Repositories) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是 ...

  10. 《C++ Primer Plus》学习笔记10

    <C++ Primer Plus>学习笔记10 <<<<<<<<<<<<<<<<<&l ...