洛谷P1783海滩防御
跟奶酪那道题差不多,用并查集来求解。
用二分,或可以用类似于克鲁斯卡尔算法的贪心来每次判断是否起点和终点已经并在一个集合里(类似奶酪)
如果已经覆盖就结束判断并得出答案:即当前选择的边的最大值。
为什么是边的最大值呢。
我们考虑最小的工作半径一定是等于两点间的一个距离,如果大于一个两点间的距离而又小于一个两点间的距离时,则可以选择小的两点间的距离从而使答案更小。所以可以枚举所有的两点间的距离然后判断到哪一个距离可使海滩封锁。
#include <bits/stdc++.h>
#define N 1010000
#define M 1011
using namespace std;
int n, m, cnt, x[N], y[N], fa[N];
double ans, dis[M][M];
struct stree {
int x, y;
double dis;
}e[N];
bool cmp(stree a, stree b) {
return a.dis < b.dis;
}
double dist(int x1, int x2, int y1, int y2) {
return sqrt( (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) );
}
int find(int a)
{
if (fa[a] == a) return a;
return fa[a] = find(fa[a]);
}
inline void krus()
{
int i;
for (i = 0; i <= cnt; i++)
{
int f1 = find(e[i].x), f2 = find(e[i].y);
if (f1 != f2)
fa[f2] = f1;
if (find(0) == find(m + 1)) break;
}
printf("%.2lf", e[i].dis);
exit(0);
}
int main()
{
// memset(fa, -1, sizeof(fa));
scanf("%d%d", &n, &m); if (m == 0) printf("0"), exit(0);
for (int i = 0; i <= m + 1; i++) fa[i] = i;
for (int i = 1; i <= m; i++) scanf("%d%d", &x[i], &y[i]);//m + 1是虚点
for (int i = 1; i < m; i++)
for(int j = i + 1; j <= m; j++)
{
e[++cnt].x = i;
e[cnt].y = j;
e[cnt].dis = dist ( x[i], x[j], y[i], y[j] ) / 2.0000;
}
for (int i = 1; i <= m; i++)
{
e[++cnt].x = i, e[cnt].y = 0, e[cnt].dis = x[i];
e[++cnt].x = i, e[cnt].y = m + 1, e[cnt].dis = n - x[i];
}
sort(e + 1, e + 1 + cnt, cmp);
krus();
}
洛谷P1783海滩防御的更多相关文章
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P1783 海滩防御
题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭.于是,WLP动用了他 ...
- P1783 海滩防御
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷:P1783 海滩防御(二分+并查集 最短路 最小生成树)
题意: 给定长度为N的海滩,然后有M做防御塔,给出每座塔的位置Xi,到海岸的距离Yi. 求防御塔上最小观测半径Ri,使得海滩被封锁. 思路:要使左边界和右边界连通. 很nice,可以二分+并查集做. ...
- 【luogu P1783 海滩防御】 题解
题目链接:https://www.luogu.org/problemnew/show/P1783 先把题目改造一下:题目所求是要一条能从0列到n列的路径,使其路径上的最大边长一半最小. 为什么是一半呢 ...
- 洛谷P4517 [JSOI2018]防御网络(dp)
题面 传送门 题解 翻译一下题意就是每次选出一些点,要用最少的边把这些点连起来,求期望边数 我也不知道为什么反正总之就是暴力枚举太麻烦了所以我们考虑贡献 如果一条边是割边,那么它会在图里当且仅当两边的 ...
- [bzoj3668][Noi2014]起床困难综合症/[洛谷3613]睡觉困难综合症
来自FallDream的博客,未经允许,请勿转载,谢谢. 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综 ...
- 洛谷 P1020导弹拦截题解
洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...
随机推荐
- js注意点
1.在JS中:var a=''; 则 a==0或a==false 结果都为true; 如果是“====” 则为false
- bat计算指定文件MD5并输出txt
@echo off set Name1=*.ADS set Name2=GM_RSSPI* set Name3=equipment* set Name4=protocols* REM 设置输出文件名 ...
- Matlab函数装饰器
info.m function result_func= info(msg) function res_func =wrap(func) function varargout = inner_wrap ...
- UCOSIII钩子函数
OSIdleTaskHook 空闲任务调用这个函数,可以用来让CPU进入低功耗模式 void OSIdleTaskHook (void) { #if OS_CFG_APP_HOOKS_EN > ...
- 某位前辈的Image识图,,有点意思,先留存
import PIL from PIL import Image def get_bin_table(threshold=155): ''' 获取灰度转二值的映射table 0表示黑色,1表示白色 ' ...
- Python学习日记(十二) 匿名函数
匿名函数: 未解决一些简单的需求而设计的函数 语法: func = lambda x : x**2 func:函数名 lambda:类似def的关键字 x:参数 x**2:返回值表达式 适用内置函数: ...
- Mac 修改hostname
mac终端上输入命令: sudo scutil --set HostName newname # 实例 sudo scutil --set HostName master
- Kubernetes 1.15部署日记-使用kubeadm--<1-2-3-4>
2019年9月17日 由于此次日记篇幅较长blog限制直接使用word发布所以分成几篇来发. 1.环境准备 10.110.149.172|192.168.111.51 K8s-1 Centos7.5 ...
- Python——函数&作用域
我们前面学的都是面向过程式的编程(代码从上到下写,并运行),而函数式编程是将繁杂的代码通过整理特性进行规整.像图书馆一样,将小说.教学.外文等书籍进行分类.让编程人员或看代码人员很容易的查看该段代码的 ...
- Linux在丢失的情况下重置密码
1.开机菜单是 移动光标到第一行 --敲击e 2.找到UTF-8,加上空格rd.break,敲击ctrl+x 3.输入以下命令 mount -o remount,rw /sysroot chroot ...