当前位置: 首页 > news >正文

[SWERC 2020] Safe Distance题解

[SWERC 2020] Safe Distance

题意

给定 NNN 个点与一个坐标 (X,Y)(X,Y)(X,Y),求从点 (0,0)(0,0)(0,0) 到点 (X,Y)(X,Y)(X,Y) 规划一条路线,不能走出 (0,0)(0,0)(0,0)(X,Y)(X,Y)(X,Y) 间形成的矩形,使得通过这条路线时距离最近的点的距离最远,N≤1000N\le 1000N1000
在这里插入图片描述

思路

不用二分也可以。

如果答案为 xxx,那么以每个点为圆心,半径为 xxx 作圆后,(0,0)(0,0)(0,0)(X,Y)(X,Y)(X,Y) 一定连通。

怎样连通不好想,可以想怎样不连通。可以发现,不连通是一定时一些相交或相切的圆把网格堵住了,于是我们可以将相交或相切的点放在同一个并查集里。想象每个圆都在不断变大,那么一定是圆心距离短的圆先相交或相切。我们给点两两建边,边权为两点间的距离,把边按照边权从小到大排序,每次将边的端点的并查集合并。因为左边界与下边界实际上是一个整体,上边界与右边界实际上是一个整体,所以如果某个边加完后使得左边界与下边界、上边界与右边界在一个并查集里,那么这个边权即为使得不连通的最小距离。答案理论上是这个最小距离减去极小的值,不过题目允许误差,输出这个值就可以。

代码

#include<bits/stdc++.h>
using namespace std;
int x,y,n,cnt,fa[1005],s[1005];
double a[1005],b[1005];
int f(int x){if(fa[x]==x) return x;return fa[x]=f(fa[x]);
}
struct node{int u,v;double w;
}bian[2000005];
bool cmp(node x,node y)
{return x.w<y.w;
}
int main()
{scanf("%d%d%d",&x,&y,&n);for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i],&b[i]);for(int i=1;i<=n+2;i++) fa[i]=i,s[i]=1;//n+1为左边界与下边界的整体,n+2为右边界与上边界的整体for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++)bian[++cnt]={i,j,sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]))/2};//记得与上下左右边界连边bian[++cnt]={i,n+1,min(x-a[i],b[i])};bian[++cnt]={i,n+2,min(y-b[i],a[i])};}sort(bian+1,bian+1+cnt,cmp);for(int i=1;i<=cnt;i++){if(s[f(bian[i].u)]<s[f(bian[i].v)])s[f(bian[i].v)]+=s[bian[i].u],fa[f(bian[i].u)]=f(bian[i].v);elses[f(bian[i].u)]+=s[bian[i].v],fa[f(bian[i].v)]=f(bian[i].u);if(f(n+1)==f(n+2)){printf("%.6f",bian[i].w);return 0;}}return 0;
}

文章转载自:

http://rs3PAdwd.yqgbw.cn
http://kFjYRblJ.yqgbw.cn
http://6KwJ6hiG.yqgbw.cn
http://EOqrjvsQ.yqgbw.cn
http://4ASIRcOC.yqgbw.cn
http://lGp4EjxK.yqgbw.cn
http://IBJoy0Bm.yqgbw.cn
http://Qyy8XZ2U.yqgbw.cn
http://byqbXzVu.yqgbw.cn
http://tc6tTCXs.yqgbw.cn
http://JvpXNVMa.yqgbw.cn
http://JJA8GuGZ.yqgbw.cn
http://07RoBlUX.yqgbw.cn
http://35gAQO1Z.yqgbw.cn
http://dHeiJRei.yqgbw.cn
http://ulpdHkgm.yqgbw.cn
http://cavAhpil.yqgbw.cn
http://7hfb8jr3.yqgbw.cn
http://RGHDGR1E.yqgbw.cn
http://6LyHi3n3.yqgbw.cn
http://EaVYJ2rq.yqgbw.cn
http://vnUG3wMY.yqgbw.cn
http://uUF9hrpE.yqgbw.cn
http://Xs3j6MyR.yqgbw.cn
http://imLMbfKD.yqgbw.cn
http://2I1JTSzh.yqgbw.cn
http://UAi1hJu1.yqgbw.cn
http://CKCZkoIQ.yqgbw.cn
http://tjbTgDNs.yqgbw.cn
http://znilsHcp.yqgbw.cn
http://www.dtcms.com/a/372427.html

相关文章:

  • 【.Net技术栈梳理】01-核心框架与运行时(CLR)
  • 《十字军东征》游戏出现0xc0000022报错的解决办法
  • 个人博客系统_测试报告
  • 第四项修炼:多元权衡——告别“单点最优”,在矛盾中编织和谐
  • Claude 4深度解析:AI编程新王者,双模型重塑行业标杆
  • 个人pytorch安装配置:cuda12.6 python3.13
  • 全栈经验之谈系列:(阶段一)架构思维与全局观
  • 【CMake】变量作用域3——目录作用域
  • 【系统分析师】第10章-关键技术:系统规划与分析(核心总结)
  • PINN驱动的高阶偏微分方程求解MATLAB代码
  • synchronized同步机制
  • 前端实现埋点的方式
  • 免费的GB28181平台,EasyNVR和EasyGBS应该怎么选?
  • ubuntu 24.10 忘记密码进入恢复模式重置密码
  • 缓存无处不在
  • 工具读取分析bmp文件
  • 多线程之HardCodedTarget(type=OssFileClient, name=file, url=http://file)异常
  • HTTP协议​​和​​API设计规范​​
  • 三种傍路设备配置实验
  • 踏脚迈入奇幻乐园
  • torch.dot()向量点乘,向量点乘计算方法, torch.dot如何计算的
  • Java 模块系统深度解析:从 Jigsaw 到现代模块化开发
  • 九联UNT403G/UN413G-内存大小区分参考指南
  • 基于HanLP的地址信息识别:识别出人名、地址和电话号码
  • 【java执行python】
  • 【数据结构】强化训练:从基础到入门到进阶(1)
  • 三.动态规划算法
  • Maya绑定:驱动关键帧动画案例,小球穿过自动门
  • Android影像基础--cameraAPI2核心流程
  • Ollama Python库的使用