洛谷:P1783 海滩防御(二分+并查集 最短路 最小生成树)
题意: 给定长度为N的海滩,然后有M做防御塔,给出每座塔的位置Xi,到海岸的距离Yi。 求防御塔上最小观测半径Ri,使得海滩被封锁。
思路:要使左边界和右边界连通。
很nice,可以二分+并查集做。 可以最小生成树做。 可以最短路做。
MST代码:
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
double x[maxn],y[maxn],ans; int tot,fa[maxn];
struct in{
int u,v;
double len;
}s[maxn];
bool cmp(in w,in p){return w.len<p.len;}
void add(int u,int v,double len)
{
tot++; s[tot].u=u; s[tot].v=v; s[tot].len=len;
}
int find(int x){
if(x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
int main()
{
int N,M;
scanf("%d%d",&N,&M);
rep(i,,M) scanf("%lf%lf",&x[i],&y[i]);
rep(i,,N+) fa[i]=i;
rep(i,,M) add(,i,x[i]),add(N+,i,N-x[i]);
rep(i,,M) rep(j,,M) add(i,j,0.5*sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])));
sort(s+,s+tot+,cmp);
rep(i,,tot){
int fu=find(s[i].u);
int fv=find(s[i].v);
if(fu==fv) continue;
fa[fu]=fv;
ans=s[i].len;
if(find()==find(N+)) break;
}
printf("%.2lf\n",ans);
return ;
}
最短路:把常规的路径求和改为路径最大值即可。代码:
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
double x[maxn],y[maxn],Len[maxn],ans,dis[maxn];
int cnt,Laxt[maxn],Next[maxn],To[maxn],N;bool vis[maxn];
void add(int u,int v,double l)
{
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v; Len[cnt]=l;
Next[++cnt]=Laxt[v]; Laxt[v]=cnt; To[cnt]=u; Len[cnt]=l;
}
void SPFA()
{
rep(i,,N+) dis[i]=0x3f3f3f3f;
queue<int>q; q.push();
while(!q.empty()){
int u=q.front(); q.pop(); vis[u]=;
for(int i=Laxt[u];i;i=Next[i]){
int v=To[i]; double t=max(dis[u],Len[i]);
if(dis[v]>t){
dis[v]=t;
if(!vis[v]) q.push(v),vis[v]=;
}
}
}
}
int main()
{
int M;
scanf("%d%d",&N,&M);
rep(i,,M) scanf("%lf%lf",&x[i],&y[i]);
rep(i,,M) add(,i,x[i]),add(N+,i,N-x[i]);
rep(i,,M) rep(j,,M) add(i,j,0.5*sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])));
SPFA();
printf("%.2lf\n",dis[N+]);
return ;
}
洛谷:P1783 海滩防御(二分+并查集 最短路 最小生成树)的更多相关文章
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P1783 海滩防御
题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭.于是,WLP动用了他 ...
- 洛谷P1783海滩防御
题目 跟奶酪那道题差不多,用并查集来求解. 用二分,或可以用类似于克鲁斯卡尔算法的贪心来每次判断是否起点和终点已经并在一个集合里(类似奶酪) 如果已经覆盖就结束判断并得出答案:即当前选择的边的最大值. ...
- 洛谷P1525 关押罪犯(并查集、二分图判定)
本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编 ...
- Bzoj1015/洛谷P1197 [JSOI2008]星球大战(并查集)
题面 Bzoj 洛谷 题解 考虑离线做法,逆序处理,一个一个星球的加入.用并查集维护一下连通性就好了. 具体来说,先将被消灭的星球储存下来,先将没有被消灭的星球用并查集并在一起,这样做可以路径压缩,然 ...
- 洛谷1525 关押罪犯NOIP2010 并查集
问题描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示某两 ...
- 洛谷 P2661 信息传递 Label:并查集||强联通分量
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- 洛谷 P1111 修复公路 Label:并查集
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...
随机推荐
- Android Studio使用adb命令连接平板
有需要使用adb命令连接调试平板的同学可以参考下(下面是android官方文档,有点老). http://donandroid.com/how-to-install-adb-interface-dri ...
- Locust 性能测试工具安装使用说明
1. 介绍 它是一个开源性能测试工具.使用 Python 代码来定义用户行为.用它可以模拟百万计的并发用户访问你的系统. 性能工具对比 LoadRunner 是非常有名的商业性能测试工具,功能 ...
- 【转帖】Spark设计理念与基本架构
Spark设计理念与基本架构 https://www.cnblogs.com/swordfall/p/9280006.html 1.基本概念 Spark中的一些概念: RDD(resillient d ...
- HTTP: Request中的post和get区别
* GET和POST之间的主要区别 1.GET是从服务器上获取数据,POST是向服务器传送数据. 2.在客户端, get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段 ...
- DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter
drf偏移分页组件 paginations.py from rest_framework.pagination import LimitOffsetPagination class MyLimitOf ...
- golang 之 jwt-go
主要针对jwt-go快速生成token.和如何取进行介绍,具体详情还请查看 github.com/dgrijalva/jwt-go 生成token package main import ( &quo ...
- vue-cli中轮播图vue-awesome-swiper使用方法
1 npm 安装 npm install vue-awesome-swiper --save 2在所用的组件中引入 import 'swiper/dist/css/swiper.css' import ...
- C# -- 高性能RPC框架:Socean.RPC
简介 Socean.RPC是一个.Net下的高性能RPC框架,框架以高性能.高稳定性为目标,底层基于socket,无第三方库引用,代码简洁,总代码量大约在2000行,框架性能较高,在普通PC上测试,长 ...
- Implicit super constructor Array() is undefined for default constructor. Must define an explicit constructor
因为你的父类已经创建了一个带参的构造函数并且父类中没有无参的构造函数,此时编译器不会为你调用默认的构造函数, 所以子类在继承父类的时候需要在自己的构造函数中显式的调用父类的构造函数,这样才能确保子类在 ...
- 学习笔记之三十年软件开发之路 - Things I Learnt The Hard Way (in 30 Years of Software Development)
三十年软件开发之路 https://mp.weixin.qq.com/s/EgN-9bIHonRid1DM0csQDw https://blog.juliobiason.net/thoughts/th ...