BZOJ 3007 [SDOI2012]拯救小云公主 - 对偶图 + 并查集
Solution
答案具有单调性, 显然可以二分答案。
有两个注意点 : 英雄是可以随便走的, 也就是不是网格图。。。 还有坐标不能小于$1$ QAQ
开始时英雄在左下角, 公主在右上角, 我们反过来考虑, 让英雄不能到达公主那。
把每个boss 看作是以其坐标为圆心, $mid$为半径的圆。
这时必须满足条件 : 矩形的下边和 左边或上边能通过圆连接
或者 矩形的 右边 和 左边或上边能通过圆连接。
这样我们只需把 下边和右边看作一个点, 左边和上边看作一个点 , 用并查集合并能够通过圆连接的boss 和 边界。
最后判断两个边界是否在同一集合内即可。
Code
#include<cstdio>
#include<cstring>
#include<cmath>
#define R register
#define rd read()
using namespace std; const int N = 3e3 + ;
const double eps = 1e-;
const double EPS = 1e-; int n, row, line;
int S, T;
int f[N];
double Dis[N][N]; struct node {
int x, y;
}pos[N]; inline int read() {
int X = , p = ; char c = getchar();
for(;c > '' || c < ''; c = getchar()) if(c == '-') p = -;
for(; c >= '' && c <= ''; c = getchar()) X = X * + c - '';
return X * p;
} int get(int x) {
return f[x] == x ? x : f[x] = get(f[x]);
} inline void merge(int x, int y) {
x = get(x); y = get(y);
f[x] = y;
} inline double cal(int i, int j) {
double x = pos[i].x - pos[j].x;
double y = pos[i].y - pos[j].y;
return sqrt(x * x + y * y);
} bool jud(double dis) {
for(R int i = ; i <= n + ; ++i)
f[i] = i;
for(R int i = ; i <= n; ++i)
if(pos[i].x + dis + EPS >= row || pos[i].y - dis - EPS <= )
merge(, i);
for(R int i = ; i <= n; ++i)
if(pos[i].x - dis - EPS <= || pos[i].y + dis + EPS >= line)
merge(i, n + );
for(R int i = ; i <= n; ++i)
for(R int j = i + ; j <= n; ++j) {
int x = get(i), y = get(j);
if(x == y) continue;
if(Dis[i][j] <= * dis)
merge(i, j);
}
return get() != get(n + );
} int main()
{
n = rd; row = rd; line = rd;
S = , T = n + ;
for(R int i = ; i <= n; ++i) pos[i].x = rd, pos[i].y = rd;
for(R int i = ; i <= n; ++i)
for(R int j = i + ; j <= n; ++j)
Dis[i][j] = cal(i, j);
double l = , r = row;
int cnt = ;
if(line > row) r = line;
while(l + eps < r && cnt--) {
R double mid = (l + r) / ;
if(jud(mid)) l = mid;
else r = mid;
}
printf("%.2lf\n", l);
}
BZOJ 3007 [SDOI2012]拯救小云公主 - 对偶图 + 并查集的更多相关文章
- 洛谷 P2498 [SDOI2012]拯救小云公主 解题报告
P2498 [SDOI2012]拯救小云公主 题目描述 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到\(boss\)的洞穴门口,他一下子就懵了,因为面前不只是一 ...
- 【BZOJ】【3007】拯救小云公主
思路题 我的naive的做法是二分答案+判定是否有路径可走……但是没有正确理解[走的方向任意]这句话…… 其实就是说想咋走咋走= =360°无死角乱走…… 所以其实是个平面上的问题…… 我们可以换个方 ...
- 二分+并查集【bzoj3007】[SDOI2012]拯救小云公主
Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...
- P2498 [SDOI2012]拯救小云公主
\(\color{#0066ff}{ 题目描述 }\) 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只bos ...
- 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】
题目 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1 ...
- [SDOI2012]拯救小云公主
题解: 是一个不错的题目 首先我们可以考虑二分答案 然后变成判定性问题 对于每个画一个圆 当其会被阻断时就是答案 阻断有四种情况 左下 上下 左右 右上 但是这样是n^2a(n)*logn的 考虑直接 ...
- BZOJ:4219: 跑得比谁都快 3007: 拯救小云公主
4219: 跑得比谁都快 3007: 拯救小云公主 三角剖分的解释可以看这里:http://www.cnblogs.com/Enceladus/p/6706444.html 后一道是前一道的弱化版. ...
- 【BZOJ3007】拯救小云公主 二分+几何+对偶图
[BZOJ3007]拯救小云公主 Description 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了 ...
- 【bzoj3007】拯救小云公主 二分+对偶图+并查集
题目描述 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等 ...
随机推荐
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: ...
- servlet 3.1 摘录
https://www.oschina.net/translate/non-blocking-io-using-servlet-3-1?cmp 非阻塞IO AsyncContext context = ...
- 安装PostGIS 2.1.1 时遇到checking for library containing GDALAllRegister... no
在postgis中执行./configure时,遇到 checking for library containing GDALAllRegister... no 的错误信息 [root@test po ...
- Centos7 安装 erlang rabbitmq
1.安装Erlang依赖采用官网的rpm包的形式进行安装,不采用yum(由系统进行自动安装 可能因为版本低的问题而出现一系列问题) erlang依赖 rpm包下载地址https://github.co ...
- 1.3.7、CDH 搭建Hadoop在安装之前(端口---第三方组件使用的端口)
第三方组件使用的端口 在下表中,每个端口的“ 访问要求”列通常是“内部”或“外部”.在此上下文中,“内部”表示端口仅用于组件之间的通信; “外部”表示该端口可用于内部或外部通信. Component ...
- GraphicsTier
[GraphicsTier] 1.enum GraphicsTier 2.enum ShaderQuality 3.enum BuildTargetGroup 4.EditorGraphicsSett ...
- PHPActiveRecord 学习三
#事务处理 注意事务 数据库要用InnoDB引擎 $c1 = User::connection(); try { //开启事务 $c1->transaction(); //sql语句 $sql ...
- pta l2-6(树的遍历)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 题意:给出一个二叉树的结点数目n, ...
- IDEA 创建HDFS项目 JAVA api
1.创建quickMaven 1.在properties中写hadoop 的版本号并且通过EL表达式的方式映射到dependency中 2.写一个repostory将依赖加载到本地仓库中 这是加载完成 ...
- laravel框架中报错 DataTables warning: table id=xxx-table - Cannot reinitialise DataTable.
laravel框架中报错 DataTables warning: table id=xxx-table - Cannot reinitialise DataTable. 分析: initializin ...