[CSP-S模拟测试]:Star Way To Heaven(最小生成树Prim)
题目描述
小$w$伤心的走上了$Star\ way\ to\ heaven$。
到天堂的道路是一个笛卡尔坐标系上一个$n\times m$的长方形通道(顶点在$(0,0)$和$(n,m)$),小$w$从最左边任意一点进入,从右边任意一点走到天堂。
最左最右的距离为$n$,上下边界距离为$m$。
其中长方形内有$k$个$Star$,每个$Star$都有一个整点坐标,$Star$的大小可以忽略不计。
每个$Star$以及长方形上下两个边缘(宇宙的边界)都有引力,所以为了成功到达$heaven$小$w$离他们越远越好。
请问小$w$走到终点的路径上,距离所有星星以及宇宙的边界的最小距离最大值可以为多少?
输入格式
一行三个整数$n,m,k$。
接下来$k$行,每行两个整数$x_i,y_i$表示一个点的坐标。
输出格式
一行一个整数表示答案,绝对误差不能超过${10}^{-6}$。
样例
样例输入:
10 5 2
1 1
2 3
样例输出:
1.11803399
数据范围与提示
对于$20\%$的数据,$k\leqslant 10$。
对于$50\%$的数据,$k\leqslant 400$。
对于$80\%$的数据,$k\leqslant 1,000$。
对于$100\%$的数据,$k\leqslant 6,000,n,m\leqslant {10}^6$。
题解
先来重申一下题意(考试的时候没弄明白,当场爆炸),路径不一定直的,中途可以拐弯(我也不知道为什么我考试的时候会下意识以为路径一定是直的)。
明确完了,开始讲题。
首先,我们如果要从两个$Star$之间穿过,那么选择从它们的中点穿过一定不劣,所以我们的问题就转化为了找从左边到右边所有路径中所要穿过的$Star$中离的最近的两个的最大值(语文不好,见谅),这个东西类似于[NOIP模拟测试]:$water$(BFS)这道题,但是当时我是使用$BFS$直接$A$掉的,其实正解就是最小生成树,那么这道题我们也用最小生成树。
怎么利用最小生成树呢?
首先是建图,先将所有的$Star$相互连边,然后再将最靠上的一个点连向上边界,最靠下的一个点连向下边界。
然后我们考虑怎么利用最小生成树,我们要从左边到右边,也就要穿过在最小生成树中从上边界到下边界最短路径中的一条边,而最优策略一定是走最长的那一条边,所以整道题便转化为了找最小生成树中从上边界到下边界的最短路径中的最长边,答案极为这条边边长的一半。
但是我们这里需要注意的是空间问题,显然$Kruskal$算法在稠密图中的空间复杂度高的可怕,而这道题考的我们便是对$Prim$算法的利用,所以有的不常用的算法至少还是要知道其原理的。
下面代码比较清奇,我在$prim$算法上稍作了改动,代码复杂度大幅度减小。
时间复杂度:$\Theta(n^2)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
double x[7000],y[7000];
double dis[7000];
bool vis[7000];
double ans;
int main()
{dis[0]=20020923;scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=k;i++){scanf("%lf%lf",&x[i],&y[i]);dis[i]=m-y[i];}dis[k+1]=m;while(1){int flag=0;for(int i=1;i<=k+1;i++)if(!vis[i]&&dis[i]<dis[flag])flag=i;vis[flag]=1;ans=max(ans,dis[flag]);if(flag==k+1)break;for(int i=1;i<=k;i++)dis[i]=min(dis[i],sqrt((x[i]-x[flag])*(x[i]-x[flag])+(y[i]-y[flag])*(y[i]-y[flag])));dis[k+1]=min(dis[k+1],y[flag]);}printf("%.8lf",ans/2);return 0;
}
rp++
转载于:https://www.cnblogs.com/wzc521/p/11382837.html
[CSP-S模拟测试]:Star Way To Heaven(最小生成树Prim)相关推荐
- Star Way To Heaven (prim最小生成树) // [ NOIP提高组 2014]飞扬的小鸟(DP)
文章目录 T1:Star Way To Heaven 题目 题解 代码实现 T2:飞扬的小鸟 题目 题解 代码实现 T1:Star Way To Heaven 题目 小 w 伤心的走上了 Star w ...
- NOIP模拟测试24「star way to hevaen·lost my music」
star way to heaven 题解 大致尝试了一下并查集,记忆化搜索,最小生成树 最小生成树是正解,跑最小生成树然后找到最大的值 欧几里德距离最小生成树学习 prim楞跑 至于为什么跑最小生成 ...
- 2018冬令营模拟测试赛(十八)
2018冬令营模拟测试赛(十八) [Problem A]Table 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述&qu ...
- 2018冬令营模拟测试赛(九)
2018冬令营模拟测试赛(九) [Problem A]王子 试题描述 不是所有王子都会遇见自己的中关村,主公,公主. 从前有个王子姓王,王王子遇到了一位美丽的公主,她的名字当然是公公主啦. 王王子对公 ...
- Mockito:一个强大的用于Java开发的模拟测试框架
介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...
- WebRTC通话质量调优:三个弱网模拟测试工具的使用与对比
作为一个使用 WebRTC 独立开发者或团队,怎样才能知道自己 App 的通话质量已经"达标"了呢?如何进行合理的弱网模拟测试?介绍给开发者们三个开源工具的部署.使用方法,及其各自 ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- 测试http请求的Chrome插件:Postman插件的查找安装模拟测试 - 讲解篇
一个测试http请求的Chrome插件:Postman 本文简述一下这个Chrome插件:Postman插件的查找.下载.安装. 这里需要合法的VPN服务商,具体原因你懂的. Chrome资源查找下载 ...
- php代码练习,PHP模拟测试练习
PHP模拟测试练习 宝剑不磨要生锈;人不学习要落后.以下是小编为大家搜索整理的PHP模拟测试练习,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网! 一.单项选择题 1.下列哪些是PH ...
- 合肥信息技术职业学院计算机模拟考试准考证,【通知】全国计算机等级考试模拟测试通知...
原标题:[通知]全国计算机等级考试模拟测试通知 全国计算机等级考试模拟测试来了 这里有小塔的秘密笔记哟 全国计算机等级考试模拟测试 1 模拟测试地点 16号教学楼2楼 2 模拟测试的安排 时间 地点 ...
最新文章
- DateGridView列的输出顺序反了
- 建设私有云需要注意哪些问题?
- java 的tree_Java TreeSet higher()方法
- 存储1m图像错误_【1m 讲堂】“跨专业挑战空调施工常见错误,你敢来参加吗?”...
- 在HTML中怎么去掉超链接的下划线?
- 自动化测试--8种定位方式以及等待详解
- 爬kuku漫画网站的小爬虫
- 当心DevOps虚假指标
- 使用svnadmin对VisualSVN进行项目迁移
- android 电视盒子 软件安装,电视盒子无法安装第三方软件怎么办?当贝市场这样一招搞定...
- ajaxfileupload -- 一款不错的AJAX文件上传插件
- 2018.1.23日记
- 这几个专业考上研再考公务员更有优势!
- matlab 函数输出 向量,matlab中的函数返回向量
- WIN7 shutdown 定时/倒计时 命令关机
- Microsoft Edge闪退问题解决方案:
- good site for studing English
- EXCHANGE 2010 修改邮件附件大小限制
- 技术风向标 | 云原生技术架构成熟度模型解读
- HTML5文件夹隐藏了怎么打开,隐藏的文件夹怎么显示 打开隐藏文件夹方法【详解】...