【CSP模拟赛】starway(玄学建边 最小生成树)
问題描述
小w伤心的走上了 Star way to heaven。
到天堂的道路是一个笛卡尔坐标系上一个n×m的长方形通道(顶点在(0,0))和(n,m)),小w从最左边任意一点进入,从右边任意一点走到天堂。
最左最右的距离为n,上下边界距离为m。
其中长方形内有k个Star,每个Star都有一个整点坐标,Star的大小可以忽略不计,
每个Star以及长方形上下两个边缘(宇宙的边界)都有引力,所以为了成功到达heaven小w离他们越远越好。
请问小V走到终点的路径上,距离所有星星以及边界的最小距离最大值可以为多少?
输入格式
一行三个整数n,m,k。
接下来k行,每行两个整数xi,yi表示一个点的坐标。
输出格式
一行一个整数表示答案,绝对误差不能超过10-6。
输入样例
10 5 2
1 1
2 3
输出样例
1.11803399
对于100%的数据 $k\leq 6000 ,n,m\leq 10^6$
分析
没什么好分析的,noi.ac上的原题都不会做了,可见这个Oier有多菜
根据套路,题目中说到最小距离最大,我们考虑二分这个最小距离然后检验
设最小距离为len
对于一个点,如果到它的最小距离为len,那么以它为圆心,len为半径形成的圆就是雷区,是不能进入的
对于一条线,雷区就是一个贼长的矩形
下图是len为1时样例的雷区

显然,如果小w只走白色区域就可以从左边走到右边,那么这个len就是可以在增加一些的
那么如何判断这些雷区可以封死小w走的路呢?
我们来看一下封死的情况,让len为$\sqrt 2$

如果把上下边界也看成点,距离小于len*2的点连边

我们发现,若是上下两个边界联通了,就从左边到右边的路就被封死了。
于是我们可以二分len然后O(n^2)连边,O(n)判定,复杂度为O(nlogn)
不过6000的数据还是过不了。
由联通,所以想到最小生成树,在最小生成树中,从下边界到上边界路径上最长的边应该就是限制上下边界联通的边,拿它除以2就是答案
然而身为年度憨憨人物的我忘了prim只记得kruskal,暴力最小生成树
prim的时间复杂度为O(n^2),kruskal的时间复杂度为O(mlogm),此题m=n^2
所以选择prim算法。
如果怕精度问题可以用longlong存下距离的平方
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,k,vis[],pre[],p[][];long long d[],ans;
long long dis(int a,int b){return 1ll*(p[a][]-p[b][])*(p[a][]-p[b][])+1ll*(p[a][]-p[b][])*(p[a][]-p[b][]);}
int main()
{
scanf("%d%d%d",&n,&m,&k);d[k+]=1ll*m*m;
for(int i=;i<=k;i++)scanf("%d%d",&p[i][],&p[i][]),d[i]=1ll*p[i][]*p[i][];
for(int i=;i<=k+;i++)
{
int nx=;long long mn=1000000000000ll;
for(int j=;j<=k+;j++)if(d[j]<=mn&&!vis[j])mn=d[nx=j];
if(nx==k+){d[nx]=ans=mn;break;}vis[nx]=;
for(int j=;j<=k+;j++)
if(j==k+)
pre[j]=d[j]>1ll*(m-p[nx][])*(m-p[nx][])?nx:pre[j],
d[j]=min(d[j],1ll*(m-p[nx][])*(m-p[nx][]));
else if(!vis[j]&&d[j]>dis(j,nx))d[j]=dis(j,nx),pre[j]=nx;
}
int x=k+;while(x)ans=max(ans,d[x]),x=pre[x];
printf("%.9lf\n",sqrt(ans)/2.0);
}
【CSP模拟赛】starway(玄学建边 最小生成树)的更多相关文章
- CSP模拟赛游记
时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ...
- 【CSP模拟赛】Confess(数学 玄学)
题目描述 小w隐藏的心绪已经难以再隐藏下去了.小w有n+ 1(保证n为偶数)个心绪,每个都包含了[1,2n]的一个大小为n的子集.现在他要找到隐藏的任意两个心绪,使得他们的交大于等于n/2. 输入描述 ...
- 【csp模拟赛4】基站建设 (station.cpp)
[题目描述] 小 Z 的爸爸是一位通信工程师,他所在的通信公司最近接到了一个新的通 信工程建设任务,他们需要在 C 城建设一批新的基站. C 城的城市规划做得非常好,整个城市被规整地划分为 8 行 8 ...
- 【CSP模拟赛】Freda的迷宫(桥)
题目描述 Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过. 黄昏 ...
- 2019/11/12 CSP模拟赛&&考前小总结
写在前面的总结 离联赛只有几天了,也马上就要回归文化课了. 有点舍不得,感觉自己的水平刚刚有点起色,却又要被抓回文化课教室了,真想在机房再赖几天啊. 像19/11/11那场的简单题,自己还是能敲出一些 ...
- CSP模拟赛2游记
这次由于有课迟到30min,了所以只考了70min. 调linux配置调了5min,只剩下65min了. T1:有点像标题统计,但要比他坑一点,而且我就被坑了,写了一个for(int i=1;i< ...
- 【NOIP模拟赛】chess 建图+spfa统计方案数
似乎弗洛伊德和迪杰斯特拉都干不了统计方案数,spfa的话就是不断入队就好. #include <cstdio> #include <cstring> #include < ...
- 【CSP模拟赛】Freda的旗帜
题目描述 要开运动会了,Freda承担起了制作全校旗帜的工作.旗帜的制作方法是这样的:Freda一共有C种颜色的布条,每种布条都有无数个,你可以认为这些布条的长.宽.厚都相等,只有颜色可能不同.每个 ...
- 【CSP模拟赛】Adore(状压dp 二进制)
题目描述 小w偶然间见到了一个DAG.这个DAG有m层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k个节点.现在小w每次可以取反第i(1<i<n-1)层和第i+1层之间的连 ...
随机推荐
- integer 面试题。
上面输出的结果是:true true ----------------------------------------------------- false true 因为-128-127是byte的 ...
- 2019 映客直播java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.映客直播等公司offer,岗位是Java后端开发,最终选择去了映客直播. 面试了很多家公司,感觉大部分公司考察的点 ...
- MySQL-By孙胜利-sifangku.com
一.数据库基本概念 数据库:信息存储的仓库,包括一系列的关系措施! 表:一个数据库中可以有若干张表(形式上你可以看出我们日常生活中建立的表) 字段:表里面的信息会分若干个栏目来存,这些栏目呢,我们在数 ...
- Sequelize手记 - (一)
最近开始接触数据库,现在普遍用的都是Mysql数据库,简单的了解了一下sql语句,没有太深入的学习,然后就开始找相关的ORM框架,然后锁定了Sequelize,个人感觉很强大,搜索了一些文档,但是很让 ...
- CSS-锚点笔记
注意点: position属性 定义建议元素布局所用的定位机制 {position:static/absolute/relative/fixed;} static:默认值,没有定位 absolute: ...
- [JavaScript] js中全局标识正则表达式的lastIndex属性
在JavaScript中使用正则表达式时,遇到一个坑:第一次匹配是true,第二次匹配是false. 因为在带全局标识"g"的正则表达式对象中,才有“lastIndex” 属性,该 ...
- 浅谈HDFS(三)之DataNote
DataNode工作机制 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳. DataNode启动后向Nam ...
- Load Balancing in gRPC
背景 基于每次调用的负载均衡 需要注意的是,gRPC的负载均衡发生在每次调用时,而不是每次连接时.换句话说,就算所有的请求来自于同一个客户,我们也希望可以将它们负载均衡到所有的服务器. 负载均衡的方法 ...
- 米勒罗宾素数检测(Miller-Rabin)
适用范围:较大数的较快素性判断 思路: 因为有好的文章讲解具体原理(见参考文章),这里只是把代码的大致思路点一下,读完了文章如果还有些迷糊,可以参考以下解释 原理是费马小定理:如果p是素数,则a^(p ...
- python测试开发django-rest-framework-63.基于函数的视图(@api_view())
前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...