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



$ 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 (二分答案+最近平面点对)的更多相关文章
- R的农场 chebnear
评测传送门 Description最近,R 终于获得了一片他梦寐以求的农场,但如此大的一片农场,想要做好防卫工作可不是一件容易的事.所以 R 购买了 N 个守卫,分别让他们站在一定的位置上(守卫不可移 ...
- R的农场
R的农场 题目描述 最近,R 终于获得了一片他梦寐以求的农场,但如此大的一片农场,想要做好防卫工作可不是一件容易的事.所以 R 购买了 N 个守卫,分别让他们站在一定的位置上(守卫不可移动,同一位置上 ...
- BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支( 二分答案 )
直接二分答案然后判断. ----------------------------------------------------------------------------- #include&l ...
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )
一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...
- 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)
洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
- bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路
Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...
- [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- CH Round #72树洞[二分答案 DFS&&BFS]
树洞 CH Round #72 - NOIP夏季划水赛 描述 在一片栖息地上有N棵树,每棵树下住着一只兔子,有M条路径连接这些树.更特殊地是,只有一棵树有3条或更多的路径与它相连,其它的树只有1条或2 ...
- [CF752E]Santa Claus and Tangerines(二分答案,dp)
题目链接:http://codeforces.com/contest/752/problem/E 题意:给n个橘子,每个橘子a(i)片,要分给k个人,问每个人最多分多少片.每个橘子每次对半分,偶数的话 ...
随机推荐
- LoadRunner12 Java Vuser API语法举例
// 检查点 web.reg_find("Text=\"retCode\":\"0000\"",new String[]{"FAI ...
- python之tkinter使用举例-Button
tkinter用于编写GUI界面,python3默认已经包含,直接使用. # GUI:tkinter使用举例 import tkinter # 实例化tkinter对象 top = tkinter.T ...
- Highcharts之折线图
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Lodop图片输出ADD_PRINT_IMAGE 有白边
ADD_PRINT_IMAGE输出图片,如果使用img标签(即超文本<img标签),是超文本,无论是相对路径,网络图片,还是base64,都可能有白边,这可能和超文本解析有关.ADD_PRINT ...
- atan和unwrap解卷绕
要计算一个系统相频特性,就要用到反正切函数,计算机中反正切函数规定,在一.二象限中的角度为0-pi,三四象限的角度为0--pi. 若一个角度从0变到2pi,但实际得到的结果是0-pi,再由-pi-0, ...
- BZOJ3425[POI2013]Polarization——DP+bitset+分块
题目描述 Everyone knew it would only be a matter of time. So what? Faced for years on, a peril becomes t ...
- SQL partition (小组排序)
很多时候,我们在SQL中进行数据去重(distinct) 结果发现有2条一样ID,或者name的数据,我们想要最接近的那条数据. 直接看看题目: 原表 select ID,Title,PRICE fr ...
- C# 后台访问webapi
具体在哪看见的忘记了. 异步: public static class CallWebAPI { public static async Task<string> APIPost(stri ...
- Leetcode 242.有效的字母异位词 By Python
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" ...
- 配置AD RMS及SharePoint 2013 IRM问题解决及相关资源
最近配置AD RMS及SharePoint 2013 IRM遇到几个问题: 1. RMS配置好后,client端连不上, 一直要求输入用户名和密码. 后来换了台不是SP的机器,并用内部DB,搞定. ...