首先到每个点的速度实际上是一个定值,就是v0*2^(起点与当前点高度差)

所以当前点i到任意一个相邻点的时间都是一个定值,

不难想到构图最短路径

 const dx:array[..] of integer=(-,,,);
      dy:array[..] of integer=(,,-,);
      inf=; type link=^node;
     node=record
       po:longint;
       len:double;
       next:link;
     end;
     point=record
       num:longint;
       dis:double;
     end; var num,a:array[..,..] of longint;
    d:array[..] of double;
    w:array[..] of link;
    heap:array[..] of point;
    where:array[..] of longint;
    t,i,j,n,m,k,x,y:longint;
    v,vn,mid:double;
    p:link; procedure add(x,y:longint;c:double);
  var p:link;
  begin
    new(p);
    p^.po:=y;
    p^.len:=c;
    p^.next:=w[x];
    w[x]:=p;
  end; procedure swap(var a,b:point);
  var c:point;
  begin
    c:=a;
    a:=b;
    b:=c;
  end; function calc(x:longint):double;
  var i:longint;
  begin
    calc:=;
    if x> then
    begin
      for i:= to x do
        calc:=calc*;
    end
    else if x< then
    begin
      for i:= to abs(x) do
        calc:=calc/;
    end;
  end; procedure sift(i:longint);
  var j,x,y:longint;
  begin
    j:=i shl ;
    while j<=t do
    begin
      if (j+<=t) and (heap[j].dis>heap[j+].dis) then inc(j);
      if heap[i].dis>heap[j].dis then
      begin
        x:=heap[i].num;
        y:=heap[j].num;
        where[x]:=j;
        where[y]:=i;
        swap(heap[i],heap[j]);
        i:=j;
        j:=i shl ;
      end
      else break;
    end;
  end; procedure up(i:longint);
  var j,x,y:longint;
  begin
    j:=i shr ;
    while j> do
    begin
      if heap[i].dis<heap[j].dis then
      begin
        x:=heap[i].num;
        y:=heap[j].num;
        where[x]:=j;
        where[y]:=i;
        swap(heap[i],heap[j]);
        i:=j;
        j:=j shr ;
      end
      else break;
    end;
  end; begin
  readln(v,n,m);
  for i:= to n do
  begin
    for j:= to m do
    begin
      read(a[i,j]);
      inc(k);
      num[i,j]:=k;
    end;
  end;
  for i:= to n do
    for j:= to m do
    begin
      vn:=v*calc(a[,]-a[i,j]);
      for k:= to do
      begin
        x:=i+dx[k];
        y:=j+dy[k];
        if num[x,y]> then add(num[i,j],num[x,y],/vn);
      end;
    end;   n:=n*m;
  t:=n;
  for i:= to n do
  begin
    if i= then d[i]:= else d[i]:=inf;
    heap[i].num:=i;
    heap[i].dis:=d[i];
    where[i]:=i;
  end;
  for i:= to n do
  begin
    x:=heap[].num;
    mid:=heap[].dis;
    if mid=inf then break;
    y:=heap[t].num;
    where[y]:=;
    swap(heap[],heap[t]);
    dec(t);
    sift();
    p:=w[x];
    while p<>nil do
    begin
      y:=p^.po;
      if d[y]>mid+p^.len then
      begin
        d[y]:=mid+p^.len;
        k:=where[y];
        heap[k].dis:=d[y];
        up(k);
      end;
      p:=p^.next;
    end;
  end;
  writeln(d[n]::);
end.

poj3037的更多相关文章

  1. 【POJ3037】Skiing 最短路

    题意: 有个n*m的滑雪场,bessie要从(1,1)滑到(n,m),问最小时间. 起始有一个速度v,然后每从一个点A到一个点B(仅仅能上下左右走,每次一格),速度就会乘上2^(权值A-权值B). 然 ...

  2. POJ3037 Skiing

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

  3. poj练习题的方法

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

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

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

随机推荐

  1. 关于XML与类型Class的映射

    我们知道数据的持久化是编程必须面对的问题.我们可以保存数据到数据库.Excel表.XML文件.TXT文件等等.那么我们编程中经常会遇到对Xml文件的操作.在http://www.cnblogs.com ...

  2. Java线程练习

    /*线程练习创建两个线程,与主线程交替运行 */ class Text extends Thread{    private String name;    Text(String name)     ...

  3. [Guava官方文档翻译] 2.使用和避免使用null (Using And Avoiding Null Explained)

    本文地址:http://www.cnblogs.com/hamhog/p/3536647.html "null很恶心." -Doug Lea "这是一个令我追悔莫及的错误 ...

  4. 信息收集->DNS分析->dnsdict6

    如何获取域名的IPV4/IPV6地址之dnsdict6的使用 dnsdict6是一个用于获取网站信息的工具.dnsdict6可以扫描网站并显示有多少域或者子域,也可以扫描ipv6/ipv4地址.dns ...

  5. (转)MySql可视化工具MySQL Workbench使用教程

    转自:http://www.cnblogs.com/daimage/archive/2012/02/25/2367534.html 1. MySQL Workbench MySQL Workbench ...

  6. java nio使用方法(转)

    最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下 ...

  7. PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码

    项目环境是php5.3.28 项目用的ThinkPHP3.2.3  已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...

  8. python 自动化之路 day 01 人生若只如初见

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 Python 注释 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式i ...

  9. IE兼容性问题

    1.H5标签兼容.解决:js:document.createElement("footer");css:display: block;或者直接使用    html5shiv.js ...

  10. 防火墙,svn服务器端安装(yum),使用

    yum install subversion 查看安装位置 rpm -ql subversion 结果如下: svn在bin目录下生成了几个二进制文件 可以查看svn的使用方法 svn --help ...