http://www.lydsy.com:808/JudgeOnline/problem.php?id=1821

这题裸题。

本题要求最短距离最长,很明显,我们排序。

这里存在贪心,即我们把边权最小的全分给n个部落的内部,然后剩下的边最小的就是答案。

将边权较小的边分给k个部落,用并查集生成最小树,使得内部的边总是小于连到外部的边。然后分剩下k个点即可,剩下的k个点的那条边一定是部落之间最小的且最长的边。

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define read(a) a=getnum()
#define print(a) printf("%d", a)
inline int getnum() { int ret=0; char c; int k=1; for(c=getchar(); c<'0' || c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0' && c<='9'; c=getchar()) ret=ret*10+c-'0'; return k*ret; } const int N=1005;
int x[N], y[N];
struct edge {
int u, v, w;
bool operator < (const edge &a) const { return w<a.w; }
}e[N*N];
int cnt;
int f[N];
int ifind(const int &x) { return x==f[x]?x:f[x]=ifind(f[x]); } int main() {
int n, m;
read(n); read(m);
for1(i, 1, n) read(x[i]), read(y[i]);
for1(i, 1, n) f[i]=i;
for1(i, 1, n) for1(j, 1, n) if(i!=j) e[cnt].u=i, e[cnt].v=j, e[cnt++].w=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
sort(e, e+cnt);
int fu, fv;
for2(i, 0, cnt) {
fu=ifind(e[i].u); fv=ifind(e[i].v);
if(fu!=fv) {
if(n>m) --n, f[fu]=fv;
else {
printf("%.2lf\n", sqrt(e[i].w));
break;
}
}
}
return 0;
}

Description

聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛 上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部 落究竟是如何分布的。 不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了N个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我们 把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。聪聪还获得了一个有意义的信息——这些野人总共被分为了K个部落!这真是个好消息。聪聪希 望从这些信息里挖掘出所有部落的详细信息。他正在尝试这样一种算法: 对于任意一种部落划分的方法,都能够求出两个部落之间的距离,聪聪希望求出一种部落划分的方法,使靠得最近的两个部落尽可能远离。 例如,下面的左图表示了一个好的划分,而右图则不是。请你编程帮助聪聪解决这个难题。

Input

第一行包含两个整数N和K(1<=N<=1000,1

Output

输出一行,为最优划分时,最近的两个部落的距离,精确到小数点后两位。

Sample Input

4 2
0 0
0 1
1 1
1 0

Sample Output

1.00

HINT

Source

JSOI2010第二轮Contest1

最新文章

  1. hibernate一对一主键单向关联
  2. 利用Java动态生成 PDF 文档
  3. 09 Object
  4. 仅个人兴趣,自己通过搜索他人的成果,结合自己的理解,来分析discuz的代码。
  5. wait、notify、notifyAll的阻塞和恢复
  6. 阿里云ECS服务器(ubuntu)下基本配置以及升级git
  7. App接口设计思路
  8. 几个常用myeclipse快捷键
  9. 深入理解jvm
  10. 教你50招提升ASP.NET性能(五):确保分页是在数据层完成的
  11. 【Java】环境变量的配置
  12. xdu_1009: Josephus环的复仇(线段树)
  13. Qname
  14. 浅谈IT企业挑选技术人员招聘几个要点
  15. python高阶函数(Map、Reduce、Filter、lamba)
  16. K3WISE常用表
  17. Intellij Idea出现 unable to establish loopback connection
  18. [Java学习] Java异常类型
  19. cf490 C. Hacking Cypher(无语)
  20. Ubuntu16 安装Jira

热门文章

  1. [ruby on rails] 跟我学之(9)删除数据
  2. 【Network】一张图看懂 Reactor 与 Proactor 模型的区别
  3. 【云计算】Docker云平台—Docker基础
  4. poj1185
  5. iOS tableview 选中Cell后的背景颜色和文字颜色
  6. Java for LeetCode 173 Binary Search Tree Iterator
  7. codeforces 483B Friends and Presents 解题报告
  8. VirtualBox 虚拟 Ubuntu 的一些感想
  9. java 执行command
  10. 解决iphone5,5s有锁版(AU,SB,S版等等)ios7越狱后+86、FT、IM等一切问题