题面

$ solution: $

这道题想到二分答案应该是不难的,因为题目是求平均工资的最小值,这个显然具备单调性:

我们设平均工资的最小值为ans,如果我们现在的平均工资x小于ans那么将x带入题目中必定会出现有两个守卫在吵架,如果我们现在的平均工资x大于等于ans那么将x带入题目中必定不会出现有两个守卫在吵架。

所以我们现在就要想办法知道在确定了平均工资的情况下,如何判断是否有守卫吵架。首先我们看题:如果两个守卫有共同的朋友,那么他们也会成为朋友。这样我们发现可以用并查集维护这个关系,然后通过并查集看两个守卫是否在同一个朋友圈。接下来我们就要知道在所有距离小于k的两个守卫中是否有一对不在同意朋友圈内。

考场上还不知道如何求,于是卡死在这里了,后来知道这就是平面最近点对,我们用这个方法可以求出所有不在同一朋友圈内的两个守卫的最近距离,然后看是不是小于k,是就说明会发生争吵。

$ code: $

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set> #define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int using namespace std; struct su{
db x,y;int z;
}a[100005],b[100005]; struct pi{
int t1,t2;db v;
}c[200005]; int n,m;
db k;
int s[100005]; inline int qr(){
char ch;
while((ch=getchar())<'0'||ch>'9');
int res=ch^48;
while((ch=getchar())>='0'&&ch<='9')
res=res*10+(ch^48);
return res;
} inline bool cmp_x(su x,su y){return x.x<y.x;}
inline bool cmp_y(su x,su y){return x.y<y.y;}
inline bool cmp_v(pi x,pi y){return x.v<y.v;} inline int get(int x){
if(s[x]==x)return x;
return s[x]=get(s[x]);
} inline bool check(int l,int r){
if(l>=r)return 1;
int mid=(l+r)>>1;
if(!check(l,mid))return 0;
if(!check(mid+1,r))return 0;
while(a[l].x+k<a[mid].x)l++;
while(a[r].x-k>a[mid].x)r--;
int top=0;
for(rg i=l;i<=r;++i)b[++top]=a[i];
sort(b+1,b+top+1,cmp_y);
for(rg i=1;i<=top;++i)
for(rg j=i+1;j<=top;++j)
if(b[j].y-b[i].y>k) break;
else if(fabs(b[j].x-b[i].x)<=k&&get(b[j].z)!=get(b[i].z))return 0;
return 1;
} inline bool yu(int x){
for(rg i=1;i<=n;++i)s[i]=i;
for(rg i=1;i<=x;++i)
s[get(c[i].t1)]=get(c[i].t2);
return check(1,n);
} int main(){
freopen("chebnear.in","r",stdin);
freopen("chebnear.out","w",stdout);
n=qr(),m=qr();scanf("%lf",&k);
for(rg i=1;i<=n;++i)
scanf("%lf%lf",&a[i].x,&a[i].y),a[i].z=i;
sort(a+1,a+n+1,cmp_x);
for(rg i=1;i<=m;++i){
c[i].t1=qr(),c[i].t2=qr();
scanf("%lf",&c[i].v);
}sort(c+1,c+m+1,cmp_v);
int l=0,r=m-1,mid;
while(l<=r){
mid=(l+r)>>1;
if(yu(mid))r=mid-1;
else l=mid+1;
}printf("%.3lf\n",c[l].v);
return 0;
}

R 的农场 chebnear (二分答案+最近平面点对)的更多相关文章

  1. R的农场 chebnear

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

  2. R的农场

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

  3. BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支( 二分答案 )

    直接二分答案然后判断. ----------------------------------------------------------------------------- #include&l ...

  4. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )

    一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...

  5. 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)

    洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...

  6. bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路

    Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...

  7. [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环

    题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...

  8. CH Round #72树洞[二分答案 DFS&&BFS]

    树洞 CH Round #72 - NOIP夏季划水赛 描述 在一片栖息地上有N棵树,每棵树下住着一只兔子,有M条路径连接这些树.更特殊地是,只有一棵树有3条或更多的路径与它相连,其它的树只有1条或2 ...

  9. [CF752E]Santa Claus and Tangerines(二分答案,dp)

    题目链接:http://codeforces.com/contest/752/problem/E 题意:给n个橘子,每个橘子a(i)片,要分给k个人,问每个人最多分多少片.每个橘子每次对半分,偶数的话 ...

随机推荐

  1. 聊聊我怎么系统学习Linux技能并快速提高的

    随着电子信息科技时代的发展,学会使用计算机在我们的生活中成为了必不可少的一项技能.而作为计算机中的三大操作系统之一的Linux更是饱受计算机爱好者们的喜爱.今天我们就来和大家一起聊一聊Linux操作系 ...

  2. 【题解】N皇后

    题目描述 相信大家都听过经典的“八皇后”问题吧?这个游戏要求在一个8×8的棋盘上放置8个皇后,使8个皇后互相不攻击(攻击的含义是有两个皇后在同一行或同一列或同一对角线上). 桐桐对这个游戏很感兴趣,也 ...

  3. bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...

  4. 自学Linux Shell12.5-while、until命令

    点击返回 自学Linux命令行与Shell脚本之路 12.5-while.until命令 until 循环与 while 循环在处理方式上刚好相反. while循环用于不断执行一系列命令,也用于从输入 ...

  5. Word Ladder - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Word Ladder - LeetCode 注意点 每一个变化的字母都要在wordList中 解法 解法一:bfs.类似走迷宫,有26个方向(即26个字 ...

  6. 【loj3044】【zjoi2019】Minimax

    题目 描述 ​ 给出一颗树,定义根节点1的深度为1,其他点深度为父亲深度+1: ​ 如下定义一个点的点权: ​ 1.叶子:为其编号:2.奇数深度:为其儿子编号最大值:3.偶数深度:为其儿子编号最小值: ...

  7. A1050. String Subtraction

    Given two strings S1 and S2, S = S1 - S2 is defined to be the remaining string after taking all the ...

  8. redis访问安全加固

    目录 redis漏洞 入侵特征 安全隐患 redis安全规范 禁止root用户启动 限制redis文件目录访问权限 开启密码认证,设置复杂密码 禁用或重命名危险命令 设置允许监听地址,不要使用0.0. ...

  9. (Set) 人见人爱A-B HDU2034

    人见人爱A-B 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2034 JAVA代码借鉴链接:https://blog.csdn.net/superbeau ...

  10. Deploy to container Plugin插件发布配置

      参数详解: 第一项(WAR/EAR files):是war包的相对路径(相对于工作区路径,即在工作区中war包的相对路径.)如我的maven执行完成之后会在工作区的target目录下生成项目.wa ...