题目描述

背景

为了统计小球的方案数,平平已经累坏了。于是,他摘掉了他那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
 
暴力+spfa 注意是无向图
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<set>
using namespace std;
const int maxn=100+10;
double n,v; struct Node{
double x,y;int pos;
}node[maxn]; int fir[maxn],nxt[maxn*maxn],to[maxn*maxn],e=0;
double val[maxn*maxn];
void add(int x,int y,double z) {
to[++e]=y;nxt[e]=fir[x];fir[x]=e; val[e]=z;
} bool cmp(const Node& a,const Node& b) {
return a.x==b.x? a.y>b.y:a.x<b.x;
} double ds(int x,int y) {
return sqrt((node[x].x-node[y].x)*(node[x].x-node[y].x)+(node[x].y-node[y].y)*(node[x].y-node[y].y));
} double ff(int x,int y) {
return sqrt((node[x].y-node[y].y)/5.0);
} double dis[maxn];
int zz[maxn];
bool vis[maxn];
void spfa(int st) {
memset(zz,0,sizeof(zz));
memset(vis,0,sizeof(vis));
for(int i=2;i<=n;++i) dis[i]=1e7;
int s=1,t=0,x,y,z;
zz[++t]=st;vis[st]=1;
while(s<=t) {
x=zz[s%maxn];
for(y=fir[x];y;y=nxt[y]) {
z=to[y];
if(dis[z]<=dis[x]+val[y]) continue;
dis[z]=dis[x]+val[y];
if(!vis[z]) {
vis[z]=1;t++;
zz[t%maxn]=z;
}
}
s++;vis[x]=0;
}
} int main() {
scanf("%lf%lf",&n,&v);
int z;
for(int i=1;i<=n;++i) {
node[i].pos=i;
scanf("%lf%lf",&node[i].x,&node[i].y);
scanf("%d",&z);
if(z)add(z,i,ds(z,i)/v),add(i,z,ds(z,i)/v);
}
sort(node+1,node+(int)n+1,cmp);
for(int i=1;i<=n;++i) for(int j=i+1;j<=n&&node[j].x==node[i].x;++j)
add(node[i].pos,node[j].pos,ff(i,j));
spfa(1);
printf("%.2lf",dis[(int)n]);
return 0;
}

  

rqnoj86 智捅马蜂窝的更多相关文章

  1. [题解]RQNOJ PID86 智捅马蜂窝

    链接:http://www.rqnoj.cn/problem/86 思路:单源点最短路 建图:首先根据父子关系连双向边,边权是距离/速度:再根据跳跃关系连单向边,边权是自由落体的时间(注意自由下落是一 ...

  2. 传智播客--ADO.net--SqlBulkCopy批量插入数据(小白必知)

    一般情况下,我们在向数据库中插入数据时用Insert语句,但是当数据量很大的时候,这种情况就比较缓慢了,这个时候就需要SqlBulkCopy这个类. SqlBulkCopy本身常用的函数有这么几个 D ...

  3. 传智播客--高级控件--showdialog关闭(小白内容)

    以往我在WPF里,用ShowDialog展示出一个页面,一般都是用Close()进行关闭. 今天看传智播客的视频时,了解到还能直接给DialogResult一个TRUE或者false的属性,使页面关闭 ...

  4. 传智播客DotNet面试题

    技术类面试.笔试题汇总(整理者:杨中科,部分内容从互联网中整理而来) 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化 ...

  5. 使用Beautifulsoup爬取药智网数据

    使用Beautifulsoup模块爬取药智网数据 Tips:1.爬取多页时,先用一页的做测试,要不然ip容易被封 2.自己常用的处理数据的方法: reg=re.compile('正则表达式') dat ...

  6. Python array,list,dataframe索引切片操作 2016年07月19日——智浪文档

    array,list,dataframe索引切片操作 2016年07月19日——智浪文档 list,一维,二维array,datafrme,loc.iloc.ix的简单探讨 Numpy数组的索引和切片 ...

  7. python_selenium智联搜索

    python_selenium智联搜索 妹子要去招聘会工作,奈何网上仅仅提供招聘会的公司名字,没有提供招聘的职位,SO我写了个小代码给妹子在智联上面搜索职位,由于时间紧迫,前程的就不写了 #!/usr ...

  8. 11.20 CSS定位智博星网页制作

    <html xmlns="http://www.w3.org/1999/xhtml">   <head>   <meta http-equiv=&qu ...

  9. 智普教育Python培训之Python开发视频教程网络爬虫实战项目

    网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 01.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 02.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Pytho ...

随机推荐

  1. PAT甲级——A1061 Dating

    Sherlock Holmes received a note with some strange strings: Let's date! 3485djDkxh4hhGE 2984akDfkkkkg ...

  2. Spring BatchSqlUpdate.updateByNamedParam例子

    关键在于定义参数和sql语句,代码如下: int dstColCount=dstColNamesList.size(); String insSql="insert into "+ ...

  3. HDFS应用实例

  4. Leetcode543.Diameter of Binary Tree二叉树的直径

    给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过根结点. 示例 : 给定二叉树 1 / \ 2    3 / \ 4  5 返回 3, 它 ...

  5. 一探前端开发中的JS调试技巧(转)

    有请提示:文中涉及较多Gif演示动画,移动端请尽量在Wifi环境中阅读 前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问 ...

  6. WPF 从属性赋值到MVVM模式详解

    示例源码 这两天学习了一下MVVM模式,和大家分享一下,也作为自己的学习笔记.这里不定义MVVM的概念,不用苍白的文字说它的好处,而是从简单的赋值讲起,一步步建立一个MVVM模式的Simple.通过前 ...

  7. fedora input problem...

    davelv最近很郁闷,因为他在Fedora 下用Eclipse写程序的时候,一旦有Eclipse实现了自动提示.代码补齐等功能后,键盘就失去相应,必须根据点右键或者切换窗口才能输入.就上网查,发现是 ...

  8. python 数据文件操作——读入数据

  9. Django项目:CRM(客户关系管理系统)--02--01PerfectCRM基本配置ADMIN02

    三.CRM项目表结构设计 from django.db import models # Create your models here. """ #运行 Terminal ...

  10. 第十章—DOM(三)——Text类型

    文本节点由TEXT类型表示,包含纯文本内容,Text节点具有以下特征: 看看下面的代码: div元素开始和结束标签只要存在内容,就会创建一个文本节点.可以使用以下代码来访问元素的这些文本子节点: 访问 ...