博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj3007】拯救小云公主 二分+对偶图+并查集
阅读量:5086 次
发布时间:2019-06-13

本文共 1599 字,大约阅读时间需要 5 分钟。

题目描述

英雄又即将踏上拯救公主的道路……
这次的拯救目标是——爱和正义的小云公主。
英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss。当英雄意识到自己还是等级1的时候,他明白这就是一个不可能完成的任务。
但他不死心,他在想,能不能避开boss去拯救公主呢,嘻嘻。
Boss的洞穴可以看成一个矩形,英雄在左下角(1,1),公主在右上角(row,line)。英雄为了避开boss,当然是离boss距离越远越好了,所以英雄决定找一条路径使到距离boss的最短距离最远。
Ps:英雄走的方向是任意的。
你可以帮帮他吗?
当英雄找到了美丽漂亮的小云公主,立刻就被boss包围了!!!英雄缓闭双眼,举手轻挥,白光一闪后使用了回城卷轴,回到了城堡,但只有小云公主回去了……因为英雄忘了进入回城的法阵了。

输入

第一行,输入三个整数,n表示boss的数目,row,line表示矩形的大小;
接下来n行,每行分别两个整数表示boss的位置坐标。

输出

输出一个小数,表示英雄的路径离boss的最远距离,精确到小数点后两位。

样例输入

1 3 3

2 2

样例输出

1.00


题解

二分+对偶图+并查集

答案显然满足单调性,所以可以二分答案,然后考虑判定。

如果能够从左下角走到右上角并且不经过每个半径为mid的圆,即原图中左下角和右上角连通,等价于对偶图中左上部分和右下部分不连通。

而对偶图就是圆面积,因此判定两个圆以及圆与直线是否有公共部分,如果有则连边。最后使用并查集判断即可。

#include 
#include
#define N 3010using namespace std;int f[N];double x[N] , y[N];int find(int x){ return x == f[x] ? x : f[x] = find(f[x]);}void merge(int x , int y){ int tx = find(x) , ty = find(y); if(tx != ty) f[tx] = ty;}int main(){ int n , i , j , cnt = 60; double a , b , l = 0 , r , mid; scanf("%d%lf%lf" , &n , &a , &b) , r = min(a , b); for(i = 1 ; i <= n ; i ++ ) scanf("%lf%lf" , &x[i] , &y[i]); while(cnt -- ) { mid = (l + r) / 2; for(i = 0 ; i <= n + 1 ; i ++ ) f[i] = i; for(i = 1 ; i <= n ; i ++ ) { if(mid >= x[i] - 1 || mid >= b - y[i]) merge(i , 0); if(mid >= a - x[i] || mid >= y[i] - 1) merge(i , n + 1); for(j = 1 ; j < i ; j ++ ) if((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) <= 4 * mid * mid) merge(i , j); } if(find(0) == find(n + 1)) r = mid; else l = mid; } printf("%.2lf\n" , l); return 0;}

 

 

转载于:https://www.cnblogs.com/GXZlegend/p/7392147.html

你可能感兴趣的文章
Linear Algebra lecture 2 note
查看>>
CRC计算模型
查看>>
Ajax之404,200等查询
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
对于负载均衡的理解
查看>>
django简介
查看>>
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>