评测传送门

Description
最近,R 终于获得了一片他梦寐以求的农场,但如此大的一片农场,想要做好防卫工作可不是一件容易的事。所以 R 购买了 N 个守卫,分别让他们站在一定的位置上(守卫不可移动,同一位置上至多有一个守卫)。但是,安排了所有的守卫之后,R 才发现,守卫们彼此十分厌恶。经 R 研究,当某两个守卫距离≤K,他们就会发生争吵;但是,想要守卫们和解也是不难的——只需要 R 给出的平均工资能使两人满意,他们就会同意和解、成为朋友;当然,如果两个守卫有共同的朋友,他们也会和解成为朋友。R 非常不想守卫们争吵,因此他想找出,在能使所有守卫闭嘴的前提下,平均工资的最小值是多少。

他想到了一个绝妙的方法,但他忙着去 Farm,没时间,所以这个任务就交给你了。
Input
第 1 行为三个数 N, M, K。
接下来 N 行为 N 个守卫的位置,每行包含两个实数 x, y (x≥0, y≥0)。
接下来 M 行,每行三个数,u, v, w,代表若平均工资≥w,则 u 和 v 同意和解。
Output
输出文件有且仅有一行,一个实数 p,代表最小的平均工资。

data range

M≤100000, M≤200000

Attention
1、本题中的距离定义:对于两个守卫 (x1, y1), (x2, y2) ,它们的距离定义为 max{|x1-x2|,|y1-y2|} 。
2、整数均在 int 范围内,实数均在 double 范围内。
3、给定图中可能存在重边。
4、输出结果保留三位小数。

25分思路:

  预处理出发生冲突的守卫编号

  然后依据输入的两个守卫成为friends的最低平均工资连边

  边权即为输入的最低工资

  然后枚举之前预处理出的发生冲突的守卫 求出它们之间的最短路

  这里路长的定义为:经过的所有路径的边权的最大值,而不是所有路径边权相加

  在所有的最短路之间取max即可

正解思路:

  枚举最低平均工资

  发现它可以二分 即若当前最低平均工资满足所有守卫无冲突

  则 r=mid-1寻找更小的 反之....

  二分工资之后怎么判断是否符合题意呢:

  若两个守卫成为朋友的最低工资<=mid 那么连边(用并查集就可以了)

  然后求平面内最近点对(连了线的两点不对答案做贡献)   (这里是最近点对qwq)

  若最近点对之间的距离>k则合题意

我觉得上面辣种求最近点对的思路很好但是我调了很久的code还没好

然后又借鉴了一下wch的想法   我发现也很好啊不用求最近点对了

也是分治 找有没有两点之间的距离小于等于k 直接在solve里面判断

CODE:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define R register
#define go(i,a,b) for(R int i=a;i<=b;i++)
#define M 100001
#define db double
#define inf 210000000.0
using namespace std;
struct node1{db x,y;int id;}a[M],c[M];
struct node2{int u,v;db w;}b[M<<];
int n,m,f[M];
db k;
int find(int x){if(f[x]==x)return x;return f[x]=find(f[x]);}
bool cmp1(node2 x,node2 y){return x.w<y.w;}
bool cmp2(node1 x,node1 y){return x.y<y.y;}
bool cmp3(node1 x,node1 y){return x.x<y.x;}
bool sol(int l,int r)
{
if(l>=r) return ;//边界
int mid=(l+r)>>,ct=;
if(!sol(l,mid)||!sol(mid+,r)) return ;
while(a[l].x+k<a[mid].x) l++;
while(a[r].x-k>a[mid].x) r--;
go(i,l,r) c[++ct]=a[i];
sort(c+,c+ct+,cmp2);
go(i,,ct)
go(j,i+,ct)
{
if(c[j].y-c[i].y>k) break;
if(fabs(c[i].x-c[j].x)<=k&&find(c[i].id)!=find(c[j].id)) return ;
//这里只要判断x 因为已经保证 c[j].y-c[i].y<=k
}
return ;
}
bool ck(int mid)
{
go(i,,n) f[i]=i; //不要落掉这一步啦 写并查集的时候一定要记得!
go(i,,m)
{
if(b[i].w>b[mid].w) break;
f[find(b[i].u)]=find(b[i].v);//注意这里啊 开始写错了找了好久qwq
}
return sol(,n);
}
int main()
{
cin>>n>>m>>k;
go(i,,n) cin>>a[i].x>>a[i].y,a[i].id=i;
sort(a+,a+n+,cmp3);//按x排序
go(i,,m) cin>>b[i].u>>b[i].v>>b[i].w;
sort(b+,b+m+,cmp1);//按w排序
//好像很少写对过二分??初始化 mid+-1什么的总是搞错
//然后这题的二分还不清楚为什么我之前写的不对 要去问一下 然后再写到这里来
int l=,r=m-,mid;//这里要注意l,r的初始化
while(l<=r)
{
mid=(l+r)>>;
if(ck(mid)) {r=mid-;}
else l=mid+;
}
printf("%.3lf",b[l].w);
return ;
}

R的农场 chebnear的更多相关文章

  1. R 的农场 chebnear (二分答案+最近平面点对)

    题面 \(solution:\) 这道题想到二分答案应该是不难的,因为题目是求平均工资的最小值,这个显然具备单调性: 我们设平均工资的最小值为ans,如果我们现在的平均工资x小于ans那么将x带入题目 ...

  2. R的农场

    R的农场 题目描述 最近,R 终于获得了一片他梦寐以求的农场,但如此大的一片农场,想要做好防卫工作可不是一件容易的事.所以 R 购买了 N 个守卫,分别让他们站在一定的位置上(守卫不可移动,同一位置上 ...

  3. 【题解】[CJOI2019Chebnear]

    [题解][CJOI2019Chebnear] 题目描述 给定平面上有\(n\)个仇人,\((x,y) ,x,y \in R^+\) ,\(n\)个人都是仇人关系,而有仇人关系的一对人的切比雪夫距离若\ ...

  4. [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  5. 利用python进行数据分析2_数据采集与操作

    txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...

  6. Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页

    {#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...

  7. 【BZOJ】3436: 小K的农场

    3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 938  Solved: 417[Submit][Status][Discuss ...

  8. [swustoj 771] 奶牛农场

    奶牛农场 Description 将军有一个用栅栏围成的矩形农场和一只奶牛,在农场的一个角落放有一只矩形的箱子,有一天将军要出门,他就把奶牛用一根绳子套牢,然后将绳子的另一端绑到了那个箱子不靠栅栏的角 ...

  9. 2014.7.7 模拟赛【小K的农场】

    3.小K的农场(farm.pas/cpp/c) [题目描述] 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三 ...

随机推荐

  1. SEO优化之HTML代码优化最重要的5个标签

    众所周知,HTML代码一直是搜索引擎抓取的重点.搜索引擎会将HTML中的某些元素标签作为影响网页排名的重要依据 在我们之前的文章中也或多或少地向大家介绍了有关HTML代码的优化技巧,接下来将系统地讲解 ...

  2. Pytest - 进阶功能fixture

    1. 概述 Pytest的fixture功能灵活好用,支持参数设置,便于进行多用例测试,简单便捷,颇有pythonic.如果要深入学习pytest,必学fixture. fixture函数的作用: 完 ...

  3. Shopping Bands Rank & SBR

    Shopping Bands Rank SBR https://www.guiderank.org/index.html Nike Air Zoom Pegasus 34 http://www.shi ...

  4. BZOJ 3527 力 | FFT

    BZOJ 3527 力 | 分治 题意 给出数组q,$E_i = \sum_{i < j} \frac{q_i}{(i - j) ^ 2} - \sum_{i > j} \frac{q_i ...

  5. UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举)

    UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举) 题意分析 给出n*m的矩形格子,给出k个点,每个格子里面可以放一个点.现在要求格子的最外围一圈的每行每列,至少要放一个 ...

  6. 前端学习 -- Css -- 兄弟元素选择器

    为一个元素后边的元素设置css样式: 语法:前一个 + 后一个. 作用:可以选中一个元素后紧挨着的指定的兄弟元素. 为一个元素后边的所有相同元素设置css样式: 语法:前一个 ~ 后边所有. < ...

  7. java多线程 -- ForkJoinPool 分支/ 合并框架 工作窃取

    Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总. Fork/Join 框架与线程池的 ...

  8. 解题:洛谷 p1858 多人背包

    题面 设$dp[i][j]$表示容量为$i$时的第$j$优解,因为是优解,肯定$dp[i][j]$是随着$j$增大不断递减的,这样的话对于一个新加进来的物品,它只可能从两个容量的转移的前$k$优解中转 ...

  9. 使用EntitysCodeGenerate

    http://bbs.csdn.net/topics/360256700 public DataSet xxx(DateTime start, DateTime end, string type)   ...

  10. 命令行 AppleScript 操控 iTerm2

    AppleScript 是什么? AppleScript 是 macOS 下可用于操控其他软件的脚本语言. 参考链接:https://www.iterm2.com/documentation-scri ...