问題描述

小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. vue 异步渲染

    <!DOCTYPE html> <html> <head> <title> hello world vue </title> <met ...

  2. C++ Primer Plus(第6版)习题(第二章)

    1..编写一个C++程序,它显示您的姓名和地址. #include<iostream> using namespace std; int main() { string name,addr ...

  3. Telnet入侵WindowsXP

    上一章,采用图形界面配置.这一节,采用命令方式配置 //修复.bat(掩饰名字) @ echo off //关闭回显 regedit.exe /s start.reg ///s 不打印 net sta ...

  4. c# 将两个表的有效数据合到一个表中

    <asp:DropDownList ID="ddlSpecialty" runat="server" > </asp:DropDownList ...

  5. windows添加ftp站点

    安装下,对应的服务: 在网站上,右键,添加,ftp站点. 配置路径: 然后下一步,选择所有用户,  读写权限.就可以了.

  6. PHP 基于redis的分布式锁

    <?php class ProcessRedisLock { /** * redis key 前缀 */ const KEY_PREFIX = 'PROCESS_REDIS_LOCK:'; /* ...

  7. Cglib invoke为什么会死循环?

    目录 Cglib invoke为什么会死循环? 动态代理子类的java文件 动态代理子类实例化过程 动态代理类调用过程 动态代理之MethodProxy.invokeSuper Cglib invok ...

  8. 常用的PHP字符串操作函数

    1.strlen 但是要注意!如果字符串中是汉字等其他字符时候呢? $str = "我"; echo strlen($str); //一个汉字,在UTF8格式下,显示3, ANSI ...

  9. Spring @Cacheable注解 && 事务@Transactional 在同一个类中的方法调用不生效

    @Cacheable 注解在对象内部调用不会生效 代码示例:ProductServiceImpl.java public List<ProductInfoVO> getProductLis ...

  10. springboot注解@NotNull,@NotBlank,@Valid自动判定空值

    一.前言 搭建springboot项目,我们都是采用的Restful接口,那么问题来了,当前端调用接口或者是其他项目调用时,我们不能单一靠调用方来控制参数的准确性,自己也要对一些非空的值进行判定. 二 ...