【测试】【最短路】图论专题训练--智捅马蜂窝_diying4157的博客-程序员宅基地

题目:智捅马蜂窝(hornet.pas/cpp/in/out)

题目描述

背景
为了统计小球的方案数,平平已经累坏了。于是,他摘掉了他那800度的眼镜,躺在树下休息。
后来,平平发现树上有一个特别不一样的水果,又累又饿的平平打算去把它摘下来。
题目描述
现在,将大树以一个N个节点的无向图的形式给出,每个节点用坐标(Xi,Yi)来表示表示,平平要从第一个点爬到第N个点,除了从一个节点爬向另一个相邻的节点以外,他还有一种移动方法,就是从一个节点跳下,到达正下方的某个节点(之间可隔着若干个点和边),即当Xj=Xi and Yi<Yj 时,平平就可以从j节点下落到i节点,他下落所用时间满足自由落体公式,t=sqrt((Yj-Yi)*2/g) (注意:g取10)。如果出现两线相交的情况,我们不认为它们是相通的。
数据规模
对于100%数据,1<=N<=100,1<=V<=10,0<=X,Y<=100.
建议使用extended(pas)或double(c and c++)计算,我们对于精度造成的误差将不予重测。

输入格式

两个整数N,V,N表示节点个数,V表示平平爬树的速度。
接下来N行,每行包含3个整数X,Y,F,X,Y是这个点的坐标,F是他的父节点(F一定小于这个点的标号,第一行的F为0)。
注意:两节点间距离按欧几里德距离计算 dis = sqrt( ( x1 – x2 ) 2+ ( y1 – y2 )2 )

输出格式

输出仅包括一行,从1到N所用的最少所需时间T,保留两位小数。

样例输入

9 1

5 0 0

5 5 1

6 5 2

7 6 2

6 9 2

3 6 2

4 5 2

3 2 7

7 2 3

样例输出

8.13

 

题目很简单,读入的时候建图没问题,然后需要一次O(n2)的循环来找出所有能够自由下落的点,然后注意,一定要更优才更新值!!!

program hornet;

const maxn=100+100;

var
  n,v:longint;
  x,y,f:array[0..maxn] of longint;
  map:array[0..maxn,0..maxn] of extended;//记录时间
  dist:array[0..maxn] of extended;
  h:array[0..maxn] of boolean;

procedure init;
begin
  assign(input,'hornet.in');
  assign(output,'hornet.out');
  reset(input);
  rewrite(output);
end;
procedure outit;
begin
  close(input);
  close(output);
  halt;
end;

function dis(i,j:longint):extended;
begin
  exit(sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j])));
end;

procedure readdata;
var
  i,j:longint;
begin
  read(n,v);
  for i:=1 to n do//处理相连情况
  begin
    read(x[i],y[i],f[i]);
    if f[i]=0 then continue;
    map[i,f[i]]:=dis(i,f[i])/v;
    map[f[i],i]:=dis(i,f[i])/v;
  end;
  for i:=1 to n do//处理自由落体
    for j:=1 to n do
    begin
      if i=j then continue;
      if (x[i]=x[j])and(y[i]>y[j]) then//自由落体 i --> j
      begin
        map[i,j]:=sqrt((2*(y[i]-y[j]))/10);
      end;
    end;
end;

procedure dijkstra;
var
  i,k,j:longint;
  total,min:extended;
begin
  total:=0;
  for i:=1 to n do
  begin

    k:=0;min:=maxlongint;
    for j:=1 to n do
    begin
      if (not h[j])and(min>dist[j]) then
      begin
        k:=j;min:=dist[j];
      end;
    end;

    h[k]:=true;

    for j:=1 to n do
    begin
      if (not h[j])and(map[k,j]<>0)and(dist[j]>dist[k]+map[k,j]) then
        dist[j]:=dist[k]+map[k,j];
    end;
  end;
  writeln(dist[n]:0:2);
end;

procedure main;
var
  i,k,j:longint;
begin
  for i:=1 to n do
    dist[i]:=1e10;
  dist[1]:=0;
  dijkstra;
end;

begin
  init;
  readdata;
  main;
  outit;
end.

 

 

转载于:https://www.cnblogs.com/oijzh/archive/2012/08/19/2646676.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/diying4157/article/details/101799802

智能推荐

浅谈IC设计时序约束(大咖带你懂IC)_数字ic面试:时序约束-程序员宅基地

学数字IC的同学都知道的经典问题。延时/时序,是数字电路的核心概念。时序约束,是保证门级电路正常工作的延迟约束,就好像高速公路上行驶的汽车,对其车速和安全车距的要求。速度过快,车距过近,就很容易发生撞车, 而速度过慢,车距过大,就容易造成拥堵。 所以,只有合适的速度和车距要求才能保证高速公路的安全和畅通。门级电路的原理类似,如果从前级寄存器到后级寄存器之间的数据路径,延迟过大,传输过慢,就可能造成数据“拥堵”,而延迟过小,传输过快,就会发生数据“撞车”。而数据的延迟约束是由建立时间和保持时间来约束的。._数字ic面试:时序约束

js动态添加子节点_js 动态添加子节点_Tomorrow YE的博客-程序员宅基地

function addElement_pic(i,imgsrc,website,landingPage){ //获得ul var ul = document.getElementById("hot_web_pic"); //创建li var li = document.createElement("li"); //给li设置属性    li.setAttrib_js 动态添加子节点

银行家算法详解(C语言)_银行家算法c_Sparky*的博客-程序员宅基地

概述银行家算法是荷兰学者Dijkstra为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。后来该算法被用在操作系统中,用于避免死锁核心思想:在进程提出资源申请时,先预判此分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。过程演示图解假定有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7。在T0时刻的资源分配情况如下T0时刻的安全性P1发出请求向量Request1(1,_银行家算法c

算法岗位之操作系统部分面试准备3_黑夜中坚持的博客-程序员宅基地

说一说协程概念:协程,又称微线程,纤程,英文名Coroutine。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。例如:def A() :print '1'print '2'print '3'def B() :print 'x'print 'y'print 'z'由协程运行结果可能是12x3yz。在执行...

jpeg解码_mahout_xb的博客-程序员宅基地

项目中需要对jpeg解码, 最终选择libjpeg开源库,

ReactNative 引用第三方地图插件react-native-baidumap-sdk遇到的一些坑解决方法_react-native-baidumap-sdk app开发 百度地图手机上面无法定位 但是电脑模-程序员宅基地

引入百度地图的包首先要去百度申请AK,具体申请方式可以才考百度官方文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/ak安卓配置:需要注意的是开发版本的SHA1是从电脑的全局配置文件.android获取,记得不要找错了位置。发布版本的SHA1对应你的apk发布签名。如何拿到SHA1,在百..._react-native-baidumap-sdk app开发 百度地图手机上面无法定位 但是电脑模拟器可

随便推点

js代码性能优化分析_js性能分析-程序员宅基地

减少判断层级function doSomething (part, chapter){ const parts = ['ES2016', '工程化', 'vue', 'react', 'Node'] if(!part){ console.log('请确认模块信息'); return; } if(!parts.includes(part)){ return; } console.log('属于当前课程'); _js性能分析

二分查找法(折半查找法)_帅气的刘某人的博客-程序员宅基地

要求:给定数组必须要是有序的(要么从小到大,要么从大到小排序)。原理:二分法查找(Binary Search)也称折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较,如果搜索的值大于中值,则使用同样的方式(二分法)向后搜索,反之则向前搜索,直到搜索结束为止。package com.bjsxt.test;/** * 二分查找法(要求:数组必须要是有序的)...

Big Data Management笔记01:Hadoop & HDFS-程序员宅基地

Big Data Management笔记01:Hadoop & HDFS

知乎好文推荐_山脚下的风景的博客-程序员宅基地

1.https://www.zhihu.com/question/52847926#answer-48687430 哪些爱好可以让人变得更聪明。PS:有些爱好确实可以无意间激发人的灵感,感悟人生。2.https://www.zhihu.com/question/52570731#answer-48765224你见过什么令人深省的商业故事。PS:有些商业知识对以后很有帮助,

java geojson和数据库_GeoJson和TopoJson数据格式的对比_以太创服的博客-程序员宅基地

GeoJson格式数据://这是一个简单的矩形(坐标系:WGS_84){"type":"FeatureCollection","features": [{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[117.42218831167838,31.68971206252246],[118.8025942451759,31...._topojson java

PPPoE获取到32位掩码的研究-程序员宅基地

文档也是以前丢失的文档,应该是2013年左右写的,现在把它找回来。这是搬家之前的事了,有次我进入路由器设置页面时突然发现如下问题:掩码是32位。一般说来,网络至少有4个地址才能通信,即网络地址一个,广播地址一个,通信双方各一个地址,也就是30位掩码。这种情况只有一个IP,而且该IP也是网络地址和广播地址,那么数据还是发给自己?那怎么还能上网?通过一番研究之后,得到如下结论:PPPoE拨通之后,获..._pppoe拨号获取一个32位地址没有网关arp怎么办

推荐文章

热门文章

相关标签