[题解]RQNOJ PID86 智捅马蜂窝
链接:http://www.rqnoj.cn/problem/86
思路:单源点最短路
建图:首先根据父子关系连双向边,边权是距离/速度;再根据跳跃关系连单向边,边权是自由落体的时间(注意自由下落是一个匀加速过程,若中途停下再跳一定没有直接跳优)。
我的实现:
- 1 #include <iostream>
- 2 #include <cstdio>
- 3 #include <cstring>
- 4 #include <cmath>
- 5 #include <algorithm>
- 6 #include <queue>
- 7 using namespace std;
- 8 #define MaxN 120
- 9 #define MaxM 320
- 10 #define INF 100000
- 11 struct P
- 12 {
- 13 int v,x,y;
- 14 }Point[MaxN];
- 15 struct node
- 16 {
- 17 int v;
- 18 double dist;
- 19 node *next;
- 20 };
- 21 node Edge[MaxM];
- 22 node *cnt=&Edge[0];
- 23 node *adj[MaxN];
- 24 double Dist[MaxN];
- 25 int N,V;
- 26 inline void Get_int(int &Ret)
- 27 {
- 28 char ch;
- 29 bool flag=false;
- 30 for(;ch=getchar(),ch<'0'||ch>'9';)
- 31 if(ch=='-')
- 32 flag=true;
- 33 for(Ret=ch-'0';ch=getchar(),ch>='0'&&ch<='9';Ret=Ret*10+ch-'0');
- 34 flag&&(Ret=-Ret);
- 35 }
- 36 inline double Dis(int a,int b)
- 37 {
- 38 double dx=(double)(Point[a].x-Point[b].x);
- 39 double dy=(double)(Point[a].y-Point[b].y);
- 40 return sqrt(dx*dx+dy*dy);
- 41 }
- 42 inline void Addedge(int u,int v,double w)
- 43 {
- 44 node *p=++cnt;
- 45 p->v=v;
- 46 p->dist=w;
- 47 p->next=adj[u];
- 48 adj[u]=p;
- 49 }
- 50 bool Cmp(P a,P b)
- 51 {
- 52 return ((a.x<b.x)||(a.x==b.x&&a.y<b.y));
- 53 }
- 54 inline void Read_Build()
- 55 {
- 56 Get_int(N); Get_int(V);
- 57 int i,j,pos,fa;
- 58 double T;
- 59 for(i=1;i<=N;++i)
- 60 {
- 61 Get_int(Point[i].x);Get_int(Point[i].y);
- 62 Point[i].v=i;
- 63 Get_int(fa);
- 64 if(!fa) continue;
- 65 T=Dis(i,fa)/(double)V;
- 66 Addedge(i,fa,T); Addedge(fa,i,T);
- 67 }
- 68 sort(Point+1,Point+N+1,Cmp);
- 69 for(i=2;i<=N;i++)
- 70 {
- 71 if(Point[i].x!=Point[i-1].x)
- 72 {
- 73 pos=i;
- 74 }
- 75 else
- 76 {
- 77 for(j=pos;j<i;j++)
- 78 {
- 79 T=sqrt((double)(Point[i].y-Point[j].y)/5.0);
- 80 Addedge(Point[i].v,Point[j].v,T);
- 81 }
- 82 }
- 83
- 84 }
- 85 }
- 86 struct cmp
- 87 {
- 88 bool operator()(node a,node b)
- 89 {
- 90 return a.dist>b.dist;
- 91 }
- 92 };
- 93 priority_queue <node, vector<node>, cmp> q;
- 94 void Dijkstra(int s)
- 95 {
- 96 node c,d,*p;
- 97 int u,v;
- 98 for(int i=1;i<=N;i++)
- 99 Dist[i]=INF;
- 100 Dist[s]=0;
- 101 c.v=s;c.dist=0;
- 102 q.push(c);
- 103 while(!q.empty())
- 104 {
- 105 d=q.top();q.pop();
- 106 u=d.v;
- 107 for(p=adj[u];p!=NULL;p=p->next)
- 108 {
- 109 v=p->v;
- 110 if(Dist[v]>Dist[u]+p->dist)
- 111 {
- 112 Dist[v]=Dist[u]+p->dist;
- 113 d.v=v;d.dist=Dist[v];
- 114 q.push(d);
- 115 }
- 116 }
- 117 }
- 118 }
- 119 int main()
- 120 {
- 121 Read_Build();
- 122 Dijkstra(1);
- 123 printf("%.2lf\n",Dist[N]);
- 124 return 0;
- 125 }
[题解]RQNOJ PID86 智捅马蜂窝的更多相关文章
- rqnoj86 智捅马蜂窝
题目描述 背景 为了统计小球的方案数,平平已经累坏了.于是,他摘掉了他那800度的眼镜,躺在树下休息. 后来,平平发现树上有一个特别不一样的水果,又累又饿的平平打算去把它摘下来. 题目描述 现在,将大 ...
- [题解]RQNOJ PID87 过河
链接:http://www.rqnoj.cn/problem/87 思路:动态规划 定义f[i][j]表示到达第 i 块给定石头用了 j 块添加石头的最少步数. 转移方程:f[i][j]=min{f[ ...
- [题解]RQNOJ PID85 三个袋子
链接:http://www.rqnoj.cn/problem/85 思路:一个排列问题,递推式很简单,f(n+1)=3*f(n)-1 ,由此可以推出通项公式,f(n)=0.5*3^(n-1)+0.5 ...
- [BZOJ1177][Apio2009]Oil
[BZOJ1177][Apio2009]Oil 试题描述 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M ...
- DP——由蒟蒻到神犇的进阶之路
开始更新咯 DP专题[题目来源BZOJ] 一.树形DP 1.bzoj2286消耗战 题解:因为是树形结构,一个点与根节点不联通,删一条边即可, 于是我们就可以简化这棵树,把有用的信息建立一颗虚树,然后 ...
- Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
A. Gabriel and Caterpillar 题目连接: http://www.codeforces.com/contest/652/problem/A Description The 9-t ...
- 题解-NOI2003 智破连环阵
题面 NOI2003 智破连环阵 有 \(m\) 个靶子 \((ax_j,ay_j)\) 和 \(n\) 个箭塔 \((bx_i,by_i)\).每个箭塔可以射中距离在 \(k\) 以内的靶子.第 \ ...
- 题解【RQNOJ PID497 0/1字串问题】
\[ \texttt{Description} \] 编程找出符合下列条件的字符串:①字符串中仅包含 0 和 1 两个字符:②字符串的长度为 n :③字符串中不包含连续重复三次的子串. \[ \tex ...
- 第三届“传智杯”全国大学生IT技能大赛(初赛A组)题解
留念 C - 志愿者 排序..按照题目规则说的排就可以.wa了两发我太菜了qwq #include<bits/stdc++.h> using namespace std; const in ...
随机推荐
- 1月29日 体温APP开发记录
1.阅读构建之法 现代软件工程(第三版) 2.观看Android开发视频教程最新版 Android Studio开发 3.高德地图API下载获取key
- golang中的map
1. 声明与初始化 // map的声明与初始化 userInfo := map[string]string{"name": "马亚南", "age&q ...
- static关键字的一些使用
百度百科定义static关键字 通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例.在成员的声明前面加上关键字static(静态的)就能创建 ...
- NOIP PJ/CSP-J 题目选做
1. luoguP7074 [CSP-J2020] 方格取数 2. luoguP5662 [CSP-J2019] 纪念品 3. luoguP2671 [NOIP2015 普及组] 求和 4. luog ...
- python 小兵(6)函数进阶
阅读目录 函数参数-动态参数 名称空间 函数的嵌套 gloabal.nonlocal 回到顶部 函数参数-动态参数 之前我们说过传参,如果我们在传参数的时候不很清楚有哪些的时候,或者说给一个函数传了很 ...
- Linux 集群 和免秘钥登录的方法。
/* 1.1.什么是集群? 很多台服务器(计算机)做相同的事,就称之为集群 服务器和服务器之间必须要处于联通状态(linux01和linux02可以相互访问并且传输数据) 服务器的配置和常见的计算机没 ...
- H264 编解码协议
1.概述 H264是MPEG-4标准所定义的最新编码格式,同时也是技术含量最高.代表最新技术水平的视频编码格式之一,标准写法应该是H.264.H.264视频格式是经过有损压缩的,但是在技术上尽可能做到 ...
- 开发升讯威在线客服系统启示录:怎样编写堪比 MSDN 的用户手册
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com 文章目 ...
- Spring源码-AOP部分-Spring是如何对bean实现AOP代理的
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 历史文章 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] S ...
- 【h5游戏开发】egret引擎p2物理引擎 - 小球碰撞地面搞笑的物理现象
重力的方向和地面的问题 p2中默认的方向是从上到下,如果重力默认是正数的话,物体放到世界中是会从上面往下面飘的 p2中plane地面默认的方向是y轴的方向,而在p2中y轴的方向默认是从上往下 首先来看 ...