maximum shortest distance

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1777    Accepted Submission(s): 589

Problem Description
There are n points in the plane. Your task is to pick k points (k>=2), and make the closest points in these k points as far as possible.
 
Input
For each case, the first line contains two integers n and k. The following n lines represent n points. Each contains two integers x and y. 2<=n<=50, 2<=k<=n, 0<=x,y<10000.
 
Output
For each case, output a line contains a real number with precision up to two decimal places.

 
Sample Input
3 2
0 0
10 0
0 20
 
Sample Output
22.36
 
Author
alpc50

题意:

给出n个点,问从中取哪k个点使得这k个点中每两个点之间的距离的最小值最大,输出这个距离。

代码:

//求最小值最大一般用二分。此题求出每两点之间的距离,然后二分距离,两点之间的距离大于等于此二分值的点之间连线,
//重新建图,求新图的最大团是否大于等于k。这道题可以不直接二分距离,给距离排序二分下标即可。套最大团模板。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,best,m;
int mp[][],num[];
double dis[],tmp[][],x[],y[];
bool dfs(int s[],int sum,int cnt)
{
if(sum==){
if(cnt>best){
best=cnt;
return ;
}
return ;
}
int t[];
for(int i=;i<sum;i++){
if(cnt+(sum-i)<=best) return ;
if(cnt+num[s[i]]<=best) return ;
int k=;
for(int j=i+;j<sum;j++){
if(mp[s[i]][s[j]]) t[k++]=s[j];
}
if(dfs(t,k,cnt+)) return ;
}
return ;
}
bool Maxt(int M)
{
//if(n<=0) return 0;
int s[];
best=;
memset(mp,,sizeof(mp));
for(int i=;i<n;i++)
for(int j=i+;j<n;j++)
if(tmp[i][j]>=dis[M]) mp[i][j]=mp[j][i]=;
for(int i=n-;i>=;i--){
int k=;
for(int j=i+;j<n;j++){
if(mp[i][j]) s[k++]=j;
}
dfs(s,k,);
num[i]=best;
if(best>=m) return true;
}
return false;
}
int main()
{
while(~scanf("%d%d",&n,&m)){
int cnt=;
for(int i=;i<n;i++){
scanf("%lf%lf",&x[i],&y[i]);
tmp[i][i]=;
for(int j=;j<i;j++)
dis[cnt++]=tmp[i][j]=tmp[j][i]=((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
sort(dis,dis+cnt);
int ans=;
int L=,R=cnt-,M;
while(L<=R){
M=(L+R)/;
if(Maxt(M)) {L=M+;ans=M;}
else R=M-;
}
printf("%.2lf\n",sqrt(dis[ans]));
}
return ;
}

HDU3585 最大团+二分的更多相关文章

  1. Maximum Shortest Distance 最大团 二分答案 HDU 3585

    题意:给出n个点   要求取k个点  这k个点中  距离最小的两个点要求距离最大 拿到手看不出是最大团  也看不出是二分答案(第一次用) 因为答案必然存在 一定有一个最值  所以用二分答案来做 最大距 ...

  2. 【二分+最大团】【HDU3585】【maximum shortest distance】

    题目大意 在N个点钟 选出K个点 使得这K个点间的最小距离最大 二分距离,然后如果两点间距离小于它的边当做不存在,求出最大团,如果最大团>=K,向上缩小区间 <  K  ,  向下缩小区间 ...

  3. hdu3585 二分最大团(dp优化)

    题意       给你一些点( <= 50),让你找到k个点,使得他们之间的最小距离最大. 思路:       求最小的最大,我们可以直接二分去枚举距离,但是要注意,不要去二分double找距离 ...

  4. hdu 3585 二分+最大团

    题目:给出平面上n个点,现在找m个点,并且使得这m个点最近的两个最远. 分析:显然这满足二分的性质,二分答案,根据点距离需要大于等于二分值重新构造新图,则问题变成了:在新图中找出满足所有点对之间的距离 ...

  5. HDU3585 Information Disturbing 树形dp+二分

    http://acm.split.hdu.edu.cn/showproblem.php?pid=3586   题意 : 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用 ...

  6. 网络流(二分):BZOJ 3993: [SDOI2015]星际战争

    Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈 地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型 ...

  7. 最大团&稳定婚姻系列

    [HDU]   1530 Maximum Clique 1435 Stable Match 3585 maximum shortest distance 二分+最大团 1522 Marriage is ...

  8. Codeforces 975 前缀和二分算存活人数 思维离直线速度相同判平行

    A /* Huyyt */ #include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; map< ...

  9. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

随机推荐

  1. [C++] Fucntions

    Statements A break statements terminate the nearest wile, do while, for or switch statement. A break ...

  2. 2019-1-7Xiaomi Mi5 刷全球版MIUI教程

    2019-1-7Xiaomi Mi5 刷全球版MIUI教程 mi5 教程 小书匠  欢迎走进zozo的学习之旅. 前言 固件下载 刷机 刷recovery,root 试用体验 其他参考 前言 机器是老 ...

  3. Red and Black(DFS深搜实现)

    Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...

  4. java---StringBuilder类的用法(转载)

    转载自http://blog.csdn.net/zi_jun/article/details/7624999 String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在 ...

  5. JavaScript控制href属性进行钓鱼

    前一阵子,发现JavaScript中允许临时改变<a>标签的href属性,当改变其属性后你点击它可能看不出有多严重,但是,它可以通过欺骗手段来诱骗用户透露他们的详细资料. // Uncom ...

  6. TCP系列03—连接管理—2、TCP连接的同时打开和同时关闭

    在前面的内容中我们介绍了TCP连接管理中最常见的三次握手方式和四次挥手的方式.但是有可能A和B两端同时执行主动打开并连接对方或者同时执行主动关闭连接(尽管发生这种情况的可能性比较低低),这个时候的流程 ...

  7. The New Day

    于博毅 160809107 爱好电脑研究 选大学专业的时候,把计算机类放在了第一专业,当时从小就很喜欢计算机,以前有接触过编程但仅限于看书,并没有动手实践过,选课的时候看了一下专业课程,都是我想学的 ...

  8. Linux系统的性能测试

    性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench 一.CPU物理个数.内核.超线程.多核心 1.登录Terminal,执行:cat /proc/cpuinfo,就会显示出主机的CPU详 ...

  9. DVD与CD区别

    经常听朋友说什么DVD什么CD什么的,不知道到底有什么区别,专门百度找了下,找到以下资料 ======================================================= ...

  10. ubuntu 只有客人会话登录(第一次深刻感受文件权限的威力 )

    为了测试docker的挂载权限,把宿主机的/etc/passwd文件挂载到了虚机当中,进入虚机想看下能不能直接对我宿主机上的文件进行操作,把/etc/passwd删掉了最后十行...结果宿主机上的/e ...