链接:http://www.rqnoj.cn/problem/86

思路:单源点最短路

建图:首先根据父子关系连双向边,边权是距离/速度;再根据跳跃关系连单向边,边权是自由落体的时间(注意自由下落是一个匀加速过程,若中途停下再跳一定没有直接跳优)。

我的实现:

  1. 1 #include <iostream>
  2. 2 #include <cstdio>
  3. 3 #include <cstring>
  4. 4 #include <cmath>
  5. 5 #include <algorithm>
  6. 6 #include <queue>
  7. 7 using namespace std;
  8. 8 #define MaxN 120
  9. 9 #define MaxM 320
  10. 10 #define INF 100000
  11. 11 struct P
  12. 12 {
  13. 13 int v,x,y;
  14. 14 }Point[MaxN];
  15. 15 struct node
  16. 16 {
  17. 17 int v;
  18. 18 double dist;
  19. 19 node *next;
  20. 20 };
  21. 21 node Edge[MaxM];
  22. 22 node *cnt=&Edge[0];
  23. 23 node *adj[MaxN];
  24. 24 double Dist[MaxN];
  25. 25 int N,V;
  26. 26 inline void Get_int(int &Ret)
  27. 27 {
  28. 28 char ch;
  29. 29 bool flag=false;
  30. 30 for(;ch=getchar(),ch<'0'||ch>'9';)
  31. 31 if(ch=='-')
  32. 32 flag=true;
  33. 33 for(Ret=ch-'0';ch=getchar(),ch>='0'&&ch<='9';Ret=Ret*10+ch-'0');
  34. 34 flag&&(Ret=-Ret);
  35. 35 }
  36. 36 inline double Dis(int a,int b)
  37. 37 {
  38. 38 double dx=(double)(Point[a].x-Point[b].x);
  39. 39 double dy=(double)(Point[a].y-Point[b].y);
  40. 40 return sqrt(dx*dx+dy*dy);
  41. 41 }
  42. 42 inline void Addedge(int u,int v,double w)
  43. 43 {
  44. 44 node *p=++cnt;
  45. 45 p->v=v;
  46. 46 p->dist=w;
  47. 47 p->next=adj[u];
  48. 48 adj[u]=p;
  49. 49 }
  50. 50 bool Cmp(P a,P b)
  51. 51 {
  52. 52 return ((a.x<b.x)||(a.x==b.x&&a.y<b.y));
  53. 53 }
  54. 54 inline void Read_Build()
  55. 55 {
  56. 56 Get_int(N); Get_int(V);
  57. 57 int i,j,pos,fa;
  58. 58 double T;
  59. 59 for(i=1;i<=N;++i)
  60. 60 {
  61. 61 Get_int(Point[i].x);Get_int(Point[i].y);
  62. 62 Point[i].v=i;
  63. 63 Get_int(fa);
  64. 64 if(!fa) continue;
  65. 65 T=Dis(i,fa)/(double)V;
  66. 66 Addedge(i,fa,T); Addedge(fa,i,T);
  67. 67 }
  68. 68 sort(Point+1,Point+N+1,Cmp);
  69. 69 for(i=2;i<=N;i++)
  70. 70 {
  71. 71 if(Point[i].x!=Point[i-1].x)
  72. 72 {
  73. 73 pos=i;
  74. 74 }
  75. 75 else
  76. 76 {
  77. 77 for(j=pos;j<i;j++)
  78. 78 {
  79. 79 T=sqrt((double)(Point[i].y-Point[j].y)/5.0);
  80. 80 Addedge(Point[i].v,Point[j].v,T);
  81. 81 }
  82. 82 }
  83. 83
  84. 84 }
  85. 85 }
  86. 86 struct cmp
  87. 87 {
  88. 88 bool operator()(node a,node b)
  89. 89 {
  90. 90 return a.dist>b.dist;
  91. 91 }
  92. 92 };
  93. 93 priority_queue <node, vector<node>, cmp> q;
  94. 94 void Dijkstra(int s)
  95. 95 {
  96. 96 node c,d,*p;
  97. 97 int u,v;
  98. 98 for(int i=1;i<=N;i++)
  99. 99 Dist[i]=INF;
  100. 100 Dist[s]=0;
  101. 101 c.v=s;c.dist=0;
  102. 102 q.push(c);
  103. 103 while(!q.empty())
  104. 104 {
  105. 105 d=q.top();q.pop();
  106. 106 u=d.v;
  107. 107 for(p=adj[u];p!=NULL;p=p->next)
  108. 108 {
  109. 109 v=p->v;
  110. 110 if(Dist[v]>Dist[u]+p->dist)
  111. 111 {
  112. 112 Dist[v]=Dist[u]+p->dist;
  113. 113 d.v=v;d.dist=Dist[v];
  114. 114 q.push(d);
  115. 115 }
  116. 116 }
  117. 117 }
  118. 118 }
  119. 119 int main()
  120. 120 {
  121. 121 Read_Build();
  122. 122 Dijkstra(1);
  123. 123 printf("%.2lf\n",Dist[N]);
  124. 124 return 0;
  125. 125 }

[题解]RQNOJ PID86 智捅马蜂窝的更多相关文章

  1. rqnoj86 智捅马蜂窝

    题目描述 背景 为了统计小球的方案数,平平已经累坏了.于是,他摘掉了他那800度的眼镜,躺在树下休息. 后来,平平发现树上有一个特别不一样的水果,又累又饿的平平打算去把它摘下来. 题目描述 现在,将大 ...

  2. [题解]RQNOJ PID87 过河

    链接:http://www.rqnoj.cn/problem/87 思路:动态规划 定义f[i][j]表示到达第 i 块给定石头用了 j 块添加石头的最少步数. 转移方程:f[i][j]=min{f[ ...

  3. [题解]RQNOJ PID85 三个袋子

    链接:http://www.rqnoj.cn/problem/85 思路:一个排列问题,递推式很简单,f(n+1)=3*f(n)-1 ,由此可以推出通项公式,f(n)=0.5*3^(n-1)+0.5 ...

  4. [BZOJ1177][Apio2009]Oil

    [BZOJ1177][Apio2009]Oil 试题描述 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M ...

  5. DP——由蒟蒻到神犇的进阶之路

    开始更新咯 DP专题[题目来源BZOJ] 一.树形DP 1.bzoj2286消耗战 题解:因为是树形结构,一个点与根节点不联通,删一条边即可, 于是我们就可以简化这棵树,把有用的信息建立一颗虚树,然后 ...

  6. Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟

    A. Gabriel and Caterpillar 题目连接: http://www.codeforces.com/contest/652/problem/A Description The 9-t ...

  7. 题解-NOI2003 智破连环阵

    题面 NOI2003 智破连环阵 有 \(m\) 个靶子 \((ax_j,ay_j)\) 和 \(n\) 个箭塔 \((bx_i,by_i)\).每个箭塔可以射中距离在 \(k\) 以内的靶子.第 \ ...

  8. 题解【RQNOJ PID497 0/1字串问题】

    \[ \texttt{Description} \] 编程找出符合下列条件的字符串:①字符串中仅包含 0 和 1 两个字符:②字符串的长度为 n :③字符串中不包含连续重复三次的子串. \[ \tex ...

  9. 第三届“传智杯”全国大学生IT技能大赛(初赛A组)题解

    留念 C - 志愿者 排序..按照题目规则说的排就可以.wa了两发我太菜了qwq #include<bits/stdc++.h> using namespace std; const in ...

随机推荐

  1. 1月29日 体温APP开发记录

    1.阅读构建之法 现代软件工程(第三版) 2.观看Android开发视频教程最新版 Android Studio开发 3.高德地图API下载获取key  

  2. golang中的map

    1. 声明与初始化 // map的声明与初始化 userInfo := map[string]string{"name": "马亚南", "age&q ...

  3. static关键字的一些使用

    百度百科定义static关键字 通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例.在成员的声明前面加上关键字static(静态的)就能创建 ...

  4. NOIP PJ/CSP-J 题目选做

    1. luoguP7074 [CSP-J2020] 方格取数 2. luoguP5662 [CSP-J2019] 纪念品 3. luoguP2671 [NOIP2015 普及组] 求和 4. luog ...

  5. python 小兵(6)函数进阶

    阅读目录 函数参数-动态参数 名称空间 函数的嵌套 gloabal.nonlocal 回到顶部 函数参数-动态参数 之前我们说过传参,如果我们在传参数的时候不很清楚有哪些的时候,或者说给一个函数传了很 ...

  6. Linux 集群 和免秘钥登录的方法。

    /* 1.1.什么是集群? 很多台服务器(计算机)做相同的事,就称之为集群 服务器和服务器之间必须要处于联通状态(linux01和linux02可以相互访问并且传输数据) 服务器的配置和常见的计算机没 ...

  7. H264 编解码协议

    1.概述 H264是MPEG-4标准所定义的最新编码格式,同时也是技术含量最高.代表最新技术水平的视频编码格式之一,标准写法应该是H.264.H.264视频格式是经过有损压缩的,但是在技术上尽可能做到 ...

  8. 开发升讯威在线客服系统启示录:怎样编写堪比 MSDN 的用户手册

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com 文章目 ...

  9. Spring源码-AOP部分-Spring是如何对bean实现AOP代理的

    实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 历史文章 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] S ...

  10. 【h5游戏开发】egret引擎p2物理引擎 - 小球碰撞地面搞笑的物理现象

    重力的方向和地面的问题 p2中默认的方向是从上到下,如果重力默认是正数的话,物体放到世界中是会从上面往下面飘的 p2中plane地面默认的方向是y轴的方向,而在p2中y轴的方向默认是从上往下 首先来看 ...