欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ1821


题意概括

  平面上有n个点,现在把他们划分成k个部分,求不同部分之间最近距离的最大值。

  两个部分的距离就是两个部分中的最近的点对的距离。

  n<=1000


题解

  我们把所有的点全部建边。

  然后我们要更新答案,就要尽量弄掉短的边。

  于是就按照kruscal那样从短的开始弄。

  当然要用并查集。

  最后答案就是剩余的有意义的边中最短的一条。

  注意最后的处理,我由于这个wa了好多次。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=1000+5,M=N*N;
int n,k,fa[N];
struct Point{
int x,y;
}p[N];
int sqr(int x){
return x*x;
}
struct Edge{
int a,b,c;
}e[M];
bool cmp(Edge a,Edge b){
return a.c<b.c;
}
int getf(int k){
return fa[k]==k?k:fa[k]=getf(fa[k]);
}
int main(){
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
int cnt=0;
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++){
e[++cnt].a=i,e[cnt].b=j;
e[cnt].c=sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y);
}
sort(e+1,e+cnt+1,cmp);
int tot=0;
for (int i=1;i<=n;i++)
fa[i]=i;
int i;
for (i=1;i<=cnt&&n-tot>k;i++){
int a=e[i].a,b=e[i].b;
if (getf(a)==getf(b))
continue;
fa[getf(a)]=getf(b);
tot++;
}
for (;i<=cnt&&getf(e[i].a)==getf(e[i].b);i++);
printf("%.2lf",sqrt(e[i].c));
return 0;
}

  

BZOJ1821 [JSOI2010]Group 部落划分 Group Kruskal的更多相关文章

  1. [BZOJ1821][JSOI2010]Group 部落划分 Group 最小生成树 贪心

    1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2943  Solved: 1390[S ...

  2. [Bzoj1821][JSOI2010]Group 部落划分 Group(并查集)(二分答案)

    1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2949  Solved: 1392[S ...

  3. 1821: [JSOI2010]Group 部落划分 Group

    1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1308  Solved: 627[Su ...

  4. 洛谷 1821: [JSOI2010]Group 部落划分 Group

    1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2596  Solved: 1221[S ...

  5. 【bzoj1821】[JSOI2010]Group 部落划分 Group Kruskal

    题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成为谜团了——聪 ...

  6. 【最小生成树+贪心】BZOJ1821: [JSOI2010]Group 部落划分 Group

    Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...

  7. BZOJ1821 [JSOI2010]Group 部落划分 Group 【最小生成树】

    题目 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成为谜团了--聪聪根 ...

  8. 【BZOJ】1821: [JSOI2010]Group 部落划分 Group(最小生成树+贪心)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1821 这题裸题. 本题要求最短距离最长,很明显,我们排序. 这里存在贪心,即我们把边权最小的 ...

  9. 【BZOJ 1821】 [JSOI2010]Group 部落划分 Group

    Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...

  10. [JSOI2010]Group 部落划分 Group

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 3661  Solved: 1755[Submit][Status][Discuss] Descripti ...

随机推荐

  1. Git服务器,仓库的hook监控

    简单应用场景:代码提交到git仓库,仓库监控到变化的jar包,然后把变化的jar包推到私服maven仓库. Git预定义了触发时机: ClientSide hooks: 1 pre-commit,当执 ...

  2. # 20155337 2016-2017-2 《Java程序设计》第八周学习总结

    20155337 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第14章 NIO与NIO2 NIO简介 NIO使用频道来衔接数据结点,在处理数据时,NIO可 ...

  3. [C++]动态内存分配问题

    动态分配内存: 1.malloc(int n)/free(&var): https://openhome.cc/Gossip/CGossip/MallocFree.html; 2.new/de ...

  4. Java SE 之 数据库操作工具类(DBUtil)设计

    JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...

  5. cpp与其他语言相比较

    new  相当于 malloc ,delete 相当于  free ,用法一样 c++ 有 namespace,可以避免类名污染  namespace xx{} c++ 有类 这个与 c#.as3比较 ...

  6. 2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践 (1)例举你能想到的一个后门进入到你系统中的可能方式? 接收邮件的方式 (2)例举你知道的后门如何启动起来(win及l ...

  7. android 面试题(一)

    1.Android中真实宽高,getWidth和getMeasuredWidth的区别:哪个计算的是真实的宽? getWidth():得到的是View在父Layout中布局好后的宽度值,如果没有父布局 ...

  8. select 1

    select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的,都是 ...

  9. 解决kali linux 开启ssh服务后连接不上的问题

    今天在手机端装了NetHunter 想连接PC的kali ,可是怎么都连不上 综合网友的经验: 1.修改sshd_config文件,命令为:vi /etc/ssh/sshd_config 将#Pass ...

  10. linux 高级字符设备驱动 ioctl操作介绍 例程分析实现【转】

    转自:http://my.oschina.net/u/274829/blog/285014 1,ioctl介绍 ioctl控制设备读写数据以及关闭等. 用户空间函数原型:int ioctl(int f ...