bzoj2663: [Beijing wc2012]灵魂宝石(二分+匈牙利)
2663: [Beijing wc2012]灵魂宝石
题目:传送门
题解:
又是一道卡精度的题目。
很容易就可以看出单调性啊,如果R越大,选的人就越多,R越小,选的人就越少。
那最小值就直接搞咯。
那么对于最大值...n==k肯定就是无限大啦
否则的话...有点恶心...太菜了
我们换个角度想问题,因为要知道R的最大值,那么在只能选择k个人的情况下,我们只需要知道n-k个人的最大匹配的最小R值就好。
那么反过来,原本是距离<R时建边,现在就改为距离>=R时再建边。。。
精度1e-7...
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define eps 1e-7
using namespace std;
struct node
{
double x,y,next;
}a[];int len,last[];
void ins(int x,int y)
{
len++;a[len].x=x;a[len].y=y;
a[len].next=last[x];last[x]=len;
}
int match[],chw[],t;
bool findmuniu(int x)
{
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(chw[y]!=t)
{
chw[y]=t;
if(match[y]== || findmuniu(match[y]))
{
match[y]=x;
return true;
}
}
}
return false;
}
struct dian
{
double x,y;
}b[];
struct bs
{
double x,y;
}c[];
int n,k;
double dis(double x1,double y1,double x2,double y2){return sqrt(abs((x1-x2)*(x1-x2))+abs((y1-y2)*(y1-y2)));}
int check(double R,int opt)
{
int ans=;
len=;memset(last,,sizeof(last));
if(opt==)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(dis(b[i].x,b[i].y,c[j].x,c[j].y)<R)
ins(i,j+n);
memset(match,,sizeof(match));
memset(chw,,sizeof(chw));t=;ans=;
for(int i=;i<=n;i++)
{
t++;
if(findmuniu(i))
ans++;
}
}
else
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(dis(b[i].x,b[i].y,c[j].x,c[j].y)>=R)
ins(i,j+n);
memset(match,,sizeof(match));
memset(chw,,sizeof(chw));t=;ans=;
for(int i=;i<=n;i++)
{
t++;
if(findmuniu(i))
ans++;
}
}
return ans;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%lf%lf",&b[i].x,&b[i].y);
for(int i=;i<=n;i++)scanf("%lf%lf",&c[i].x,&c[i].y);
double l=0.0,r=999999999.9,ans;
while(r-l>=eps)
{
double mid=(l+r)/2.0;
int tt=check(mid,);
if(tt==k)ans=mid;
if(tt>=k)r=mid-eps;
else l=mid+eps;
}
printf("%.2lf\n",ans);
if(n==k){printf("+INF\n");return ;}
l=0.0,r=999999999.9,ans=0.0;
while(r-l>=eps)
{
double mid=(l+r)/2.0;
int tt=check(mid,);
if(tt==n-k)ans=mid;
if(tt<n-k)r=mid-eps;
else l=mid+eps;
}
printf("%.2lf\n",ans);
return ;
}
bzoj2663: [Beijing wc2012]灵魂宝石(二分+匈牙利)的更多相关文章
- BZOJ2663 [Beijing wc2012]灵魂宝石
Description 平面中有\(n\)个黑点和\(n\)个白点.这些点组成\(n\)对,但是你不知道它们的对应关系.若某队中黑点白点距离\(<R\),则它是好的:\(>R\)则不是好的 ...
- BZOJ 2663: [Beijing wc2012]灵魂宝石
2663: [Beijing wc2012]灵魂宝石 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 261 Solved: 108[Submit][S ...
- bzoj 2659: [Beijing wc2012]算不出的算式
2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec Memory Limit: 128 MB Description 算不出的算式背景:曾经有一个老掉牙的游 ...
- BZOJ 2661: [BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...
- BZOJ2661: [BeiJing wc2012]连连看
2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 483 Solved: 200[Submit][S ...
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Sta ...
- BZOJ2659: [Beijing wc2012]算不出的算式
2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 668 Solved: 366[Submit] ...
- BZOJ 2662: [BeiJing wc2012]冻结(最短路)
这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...
- 2659: [Beijing wc2012]算不出的算式
2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 757 Solved: 425[Submit] ...
随机推荐
- 一步一步跟我学习hadoop(5)----hadoop Map/Reduce教程(2)
Map/Reduce用户界面 本节为用户採用框架要面对的各个环节提供了具体的描写叙述,旨在与帮助用户对实现.配置和调优进行具体的设置.然而,开发时候还是要相应着API进行相关操作. 首先我们须要了解M ...
- 浅析PHP中cookie与session技术
1.cookie是什么? cookie指某些站点为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 通俗来理解就是,你去一个专卖店或者超市买东西,然后店里给你办一张 ...
- nyoj--99--单词拼接(欧垃图判定+输出)
单词拼接 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串. 前一个单词的结尾应该与下一个单词的道字母相同. 如 alo ...
- weblogic状态监控脚本
echo "======================================welcome============================================ ...
- Java基础之对象序列化
1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现 ...
- 锋利Jquery 第一天
之前一直学习,现在终于有时间来整理一下文档了. 以下文章都是自己学习Jquery 的笔记, 希望能留下痕迹,也希望能帮助到您. 好了开始我的Jquery第一天. 我也是从Hello wrod!开始的 ...
- POJ 3020 Hungary
一道建图题-- // by SiriusRen #include <cstdio> #include <cstring> using namespace std; #defin ...
- scp 命令简明介绍
安全复制(英语:Secure copy,缩写SCP)是指在本地主机与远程主机或者两台远程主机之间基于Secure Shell(SSH)协议安全地传输电脑文件."SCP"通常指安全复 ...
- Haskell手撸Softmax回归实现MNIST手写识别
Haskell手撸Softmax回归实现MNIST手写识别 前言 初学Haskell,看的书是Learn You a Haskell for Great Good, 才刚看到Making Our Ow ...
- Spring Batch 高级-
spring batch / 并行处理 / 多线程 分区 1. 并行处理,多线程,分区 http://blog.csdn.net/github_36849773/article/details/692 ...