问題描述

小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(玄学建边 最小生成树)的更多相关文章

  1. CSP模拟赛游记

    时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ...

  2. 【CSP模拟赛】Confess(数学 玄学)

    题目描述 小w隐藏的心绪已经难以再隐藏下去了.小w有n+ 1(保证n为偶数)个心绪,每个都包含了[1,2n]的一个大小为n的子集.现在他要找到隐藏的任意两个心绪,使得他们的交大于等于n/2. 输入描述 ...

  3. 【csp模拟赛4】基站建设 (station.cpp)

    [题目描述] 小 Z 的爸爸是一位通信工程师,他所在的通信公司最近接到了一个新的通 信工程建设任务,他们需要在 C 城建设一批新的基站. C 城的城市规划做得非常好,整个城市被规整地划分为 8 行 8 ...

  4. 【CSP模拟赛】Freda的迷宫(桥)

    题目描述 Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过.  黄昏 ...

  5. 2019/11/12 CSP模拟赛&&考前小总结

    写在前面的总结 离联赛只有几天了,也马上就要回归文化课了. 有点舍不得,感觉自己的水平刚刚有点起色,却又要被抓回文化课教室了,真想在机房再赖几天啊. 像19/11/11那场的简单题,自己还是能敲出一些 ...

  6. CSP模拟赛2游记

    这次由于有课迟到30min,了所以只考了70min. 调linux配置调了5min,只剩下65min了. T1:有点像标题统计,但要比他坑一点,而且我就被坑了,写了一个for(int i=1;i< ...

  7. 【NOIP模拟赛】chess 建图+spfa统计方案数

    似乎弗洛伊德和迪杰斯特拉都干不了统计方案数,spfa的话就是不断入队就好. #include <cstdio> #include <cstring> #include < ...

  8. 【CSP模拟赛】Freda的旗帜

    题目描述  要开运动会了,Freda承担起了制作全校旗帜的工作.旗帜的制作方法是这样的:Freda一共有C种颜色的布条,每种布条都有无数个,你可以认为这些布条的长.宽.厚都相等,只有颜色可能不同.每个 ...

  9. 【CSP模拟赛】Adore(状压dp 二进制)

    题目描述 小w偶然间见到了一个DAG.这个DAG有m层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k个节点.现在小w每次可以取反第i(1<i<n-1)层和第i+1层之间的连 ...

随机推荐

  1. Tomcat组件梳理—Service组件

    Tomcat组件梳理-Service组件 1.组件定义 Tomcat中只有一个Server,一个Server可以用多个Service,一个Service可以有多个Connector和一个Contain ...

  2. 安装R和RStudio详细步骤

    安装这两项都很简单!! 1.首先要下载R安装包,可以去官网下载,也可以直接从我的百度网盘下载. 官网下载步骤: (1)进入网址:https://cran.r-project.org,选择适合自己电脑系 ...

  3. SP375 QTREE - Query on a tree (树剖)

    题目 SP375 QTREE - Query on a tree 解析 也就是个蓝题,因为比较长 树剖裸题(基本上),单点修改,链上查询. 顺便来说一下链上操作时如何将边上的操作转化为点上的操作: 可 ...

  4. codeforces Round #568(Div.2)A B C

    有点菜,只写出了三道.活不多说,上题开干. A. Ropewalkers Polycarp decided to relax on his weekend and visited to the per ...

  5. Ubuntu中使用sanp一键安装安装Notepad ++

    很少有文本编辑器像Notepad ++一样流行得到广大用户的喜爱,Notepad ++是一个免费的开源代码编辑器,专为Windows构建,用C ++编写.以其小巧的应用程序大小和出色的性能而闻名,但缺 ...

  6. Oracle数据库之初识部分知识

    Oracle是比MySql更为严格的数据库.使用时需要更加严谨. 一.安装注意事项: 1.选择地址时需要注意好不能有汉字,以免造成安装的时候注册表显示监听失败: 2.可视化窗口PLSQL编辑器(相当于 ...

  7. 通过公网ip访问虚拟机web服务

    工作中有需要进行通过外网ip访问虚拟机上的web服务,通过查阅资料,将配置过程整理如下: 思路:通过路由器的端口映射访问虚拟机上的web服务 1. 前提是在虚拟机上的web服务已经部署好,并且可以通过 ...

  8. Java读书笔记

    一.背景 工作中越来越发现对基础理解的重要性,所谓基础不牢,地动山摇.所以抽了点时间看看几本Java体系的电子书,并做笔记,如下: 二.近期要看的电子书 1.Spring实战(第4版) 2.Sprin ...

  9. Spring boot集成Swagger2,并配置多个扫描路径,添加swagger-ui-layer

    Spring boot集成Swagger,并配置多个扫描路径 1:认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目 ...

  10. 关于srping的AOP事务管理问题,自定义切面是否导致事务控制失效

    applicationContext.xml: <!-- 方法调用时间记录 --> <bean id="methodExecuteTime" class=&quo ...