洛谷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 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...
随机推荐
- 【转载】C#中ToArray方法将List集合转换为对应的数组
在C#的List集合操作中,可以使用List集合自带的ToArray方法来将List集合转换为对应的Array数组元素.ToArray方法的签名为T[] ToArray(),存在于命名空间System ...
- 【转载】Javascript使用Math.floor方法向下取整
在Javascript的数值运算中,很多时候需要对最后计算结果向下取整,Math.floor是javascript中对计算结果向下取整的函数,它总是将数值向下舍入为最接近的整数.此外Math.ceil ...
- Spring 历史漏洞复现
1.Spring Security OAuth2.0 (CVE-2016-4977) 这个洞是由于Spring Security OAuth2.0的功能,在登录成功之后由于response_type不 ...
- 【亲测有效】安装npm慢的解决方案
使用淘宝的NPM库:npm install -gd express --registry=http://registry.npm.taobao.org
- Core Animation笔记(变换)
1.仿射变换 CGAffineTransformMakeScale : CGAffineTransformMakeTranslation CGAffineTransformMakeRotation(C ...
- 安装sqlite3
说明 当前操作在root用户下执行 1.安装编译工具 yum -y groupinstall "Development tools" yum -y install zlib-dev ...
- log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment)的解决
报错:log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironme ...
- 微信小程序中使用云开发获取openid
微信小程序获取openid 新建一个微信小程序项目 注意要注册一个自己的小程序账号,并有属于自己的appid 点击云开发按钮,自行填入开发环境名称 打开app.js,找到依赖环境 修改为刚才设置的环境 ...
- 使用Cloudera Manager搭建Impala环境
使用Cloudera Manager搭建Impala服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用CM安装Imapala 1>.进入CM的服务安装向导 2> ...
- java读取excel的内容(可保存到数据库中)
//** poi jar包 // public class ReadExcel { @SuppressWarnings("static-access") private stati ...