欢迎访问~原文出处——博客园-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. python基础知识~logger模块

    一 配置文件模块 import logging ->导入模块 logger = logging.getLogger('mylogger') ->初始化类二 创建句柄 1 文件句柄 fh = ...

  2. 【转】scapy 构造以太网注入帧

    1. 描述 使用scapy进行以太网帧的注入,相对于RAW_SOCKET还是比较简单的.在讲述packet注入之前,先了解一下scapy伪造以太网帧的相关知识.下图为以太网帧格式和scapy对应的封装 ...

  3. move_base

    1>准备导航所需要的包. a.ros-indigo-gampping :我们不需要修改包内的东西,所以直接安装可执行文件就好了. sudo apt-get install ros-indigo- ...

  4. win10-Anaconda2-Theano-cuda7.5-VS2013

    两天的辗转反侧,终于灵光一现找到了错误. 首先,我在win10下配置好了gpu和cudnn版本的caffe.但是因为win平台的限制,caffe用的不够舒服.因为之前用过一阵子theano,虽然很慢, ...

  5. mysql系列十二、mysql常用hint

    对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法.同样,在mysql里,也有类似的hint功能.下面介绍一些常用的. 强制索引 FORCE ...

  6. llinux除了软连接本地文件夹同步:mount

    mount --bind /srv/dir1   /srv/dir2dir1:被共享的文件夹dir2:需要同步的文件夹

  7. 支付宝&微信统一支付

    1.实体对应关系: Application  — 支付记录实体 --  支付记录详情 2.流程 1.生成订单选择支付类型 2.支付宝:PC端.手机端.扫码:微信:微信公众号支付.扫码支付.H5支付. ...

  8. table下tbody滚动条与thead对齐的方法且每一列可以不均等

    1 前言 table下tbody滚动条与thead对齐的方法,开始在tbody的td和thead的tr>td,对每一个Item加入百分比,结果是没对齐.也尝试了用bootstrap的col-md ...

  9. PYTHON-流程控制之if/while/for

    内容: 流程控制: 1. if 2. while 3. for ==================================流程控制之if判断 1 什么是if判断 判断一个条件如果成立则做.. ...

  10. 【Android开源库】美团等APP城市选择

    CityPicker 现在使用比较多的类似美团等APP的城市选择界面. 2步即可实现,就是这么简单粗暴! Gif image APK 下载demo.apk体验. Install Gradle: com ...