Star Way To Heaven 二分 + 并查集 + Prime

本文介绍了如何使用二分查找和Prim算法解决一个关于在笛卡尔坐标系中找到到达天堂的最远路径的问题。题目要求避开k个星点和边界的影响,求解最小距离的最大值。通过构建边并运行最小生成树算法,可以确定可行的路径半径。
摘要由CSDN通过智能技术生成

题目描述

题目描述
小w伤心的走上了 Star way to heaven。
到天堂的道路是一个笛卡尔坐标系上一个n*m的长方形通道(顶点在(0,0)和(n,m)。
小w从最左边任意一点进入,从右边任意一点走到天堂,最左最右的距离为n,上下边界距离为m。
其中长方形有k个Star,每个Star都有一个整点坐标,Star的大小可以忽略不计。
每个Star以及长方形上下两个边缘宇宙的边界都有引力,所以为了成功到达Heaven小w离他们越远越好。
请问小w走到终点的路径上,距离所有星星以及边界的最小距离最大值可以为多少?

输入格式
一行三个整数n,m,k。
接下来k行,每行两个整数xi, yi表示一个点的坐标。

输出格式
一行一个数表示答案。保留到小数点后9位。

数据范围与提示
对于 100% 的数据:k≤6000;n,m≤106

样例输入输出

Sample Input
10 5 2
1 1
2 3
Sample Out普通
1.118033989

题解

对于这道题,我们考虑二分答案。
对于每一个点u,我们以r为半径做圆,如果两个圆的相交,则说明半径为r的取法是不合法的。
那么,我们只需要对于每两个点都建一条边,跑一遍最小生成树,特判一下边界,就好了。
但由于一共有n个点,n2条边,所以,会卡Kruskal,只能用Prime。

参考代码

#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
#define INf 0x7f7f7f7f

const int N = 6000;
int n, m, k;
double dis[N + 5], x[N + 5</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值