F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser   hyxzc Logout 捐赠本站
Notice:1:由于本OJ建立在Linux平台下,而许多题的数据在Windows下制作,请注意输入、输出语句及数据类型及范围,避免无谓的RE出现。 2:本站即将推出针对初学者的试题系统(与目前OJ是分开的,互不影响),内容覆盖从语法入门到NOI的所有知识点,网址是http://begin.lydsy.com/JudgeOnline/

1821: [JSOI2010]Group 部落划分 Group

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 1678  Solved: 800
[Submit][Status][Discuss]

Description

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

Input

第一行包含两个整数N和K(1<=N<=1000,1<k<=n),分别代表了野人居住点的数量和部落的数量。 接下来n行,每行包含两个正整数x,y,描述了一个居住点的坐标(0<="x," y<="10000)。" <="" div="">

Output

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

Sample Input

4 2
0 0
0 1
1 1
1 0

Sample Output

1.00
题解:
   暴力建边,然后并查集维护,直到n小与k
代码:
 1 #include<cstdio>
 2 #include<cmath>
 3 #include<iostream>
 4 #include<algorithm>
 5 #define maxn 1010
 6
 7 using namespace std;
 8
 9 int fa[maxn],n,m,cnt=0;
10
11 struct ss
12    {
13      int x;
14      int y;
15    }e[maxn];
16
17 struct node
18    {
19      int u;
20      int v;
21      int w;
22    }s[maxn*maxn];
23
24 int find(int x)
25    {
26      if (fa[x]==x) return x;
27      fa[x]=find(fa[x]);
28      return fa[x];
29    }
30
31 bool cmp(node a,node b)
32    {
33      return a.w<b.w;
34    }
35
36 int main()
37    {
38      scanf("%d%d",&n,&m);
39      for (int i=1;i<=n;i++)
40         scanf("%d%d",&e[i].x,&e[i].y);
41      for (int i=1;i<=n;i++)
42          for (int j=i+1;j<=n;j++)
43             {
44                 cnt=cnt+1;
45                 s[cnt].u=i;
46                 s[cnt].v=j;
47                 s[cnt].w=(e[j].x-e[i].x)*(e[j].x-e[i].x)+(e[j].y-e[i].y)*(e[j].y-e[i].y);
48             }
49     sort(s+1,s+cnt+1,cmp);
50     int k=n;
51     for (int i=1;i<=n;i++) fa[i]=i;
52     for (int i=1;i<=cnt;i++)
53        {
54          int fa1=find(s[i].u),fa2=find(s[i].v);
55          if (fa1!=fa2) k--;
56             fa[fa1]=fa2;
57             if (k<m) {printf("%0.2lf\n",sqrt(s[i].w));return 0;}
58         }
59    }

转载于:https://www.cnblogs.com/grhyxzc/p/5204466.html

C++之路进阶——bzoj1821(部落划分)相关推荐

  1. BZOJ 1821: [JSOI2010]Group 部落划分 Group【MST】

    1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec Memory Limit: 64 MB Description 聪聪研究发现,荒岛野人总是过着群 ...

  2. bzoj 1821: [JSOI2010]Group 部落划分

    1821: [JSOI2010]Group 部落划分 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 2484  Solved: 1165 [Submi ...

  3. 【c++图论】【口袋的天空】【部落划分】

    目标: 今天的两道题做法和思路有相同之处,合并在一起学习可以帮助更快的掌握图论中克鲁斯卡尔算法的要点和据具体实现步骤,下面来看看题目: 第一题[口袋的天空] 题目如下 题目背景 小杉坐在教室里,透过口 ...

  4. 音视频开发成长之路—进阶之路3个重要知识点丨WebRTC丨FFmpeg丨SRS流媒体服务器丨C++音视频丨嵌入式音视频

    音视频开发成长之路-进阶之路3个重要知识点 视频讲解如下,点击观看: 音视频开发成长之路-进阶之路3个重要知识点丨WebRTC丨FFmpeg丨SRS流媒体服务器丨C++音视频丨嵌入式音视频 音视频高级 ...

  5. Acwing 2382. 部落划分

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

  6. BZOJ1821 [JSOI2010]Group 部落划分 Group Kruskal

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1821 题意概括 平面上有n个点,现在把他们划分成k个部分,求不同部分之间最近距离的最大值. 两个部 ...

  7. Java成神之路-进阶步骤(转)

    https://www.hollischuang.com/archives/3280 一.基础篇 面向对象 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 平台无关性 Jav ...

  8. bzoj 1821 部落划分

    评测:http://www.lydsy.com/JudgeOnline/problem.php?id=1821 分析一下题目: 因为最后答案是距离最近的部落的距离最远,即尽量把短的边合并进部落中. 一 ...

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

    最小生成森林? 个人感觉跟最小生成树差不多.需要分成k个联通块,让联通块之间距离最大就让联通块内距离尽可能小.一颗最小生成树是N-1条边,分成k个块需要切k-1条,就是一个n-k条边的最小生成森林,然 ...

最新文章

  1. “中药资源创新院士团队”诚聘结构、合成和计算生物学博士后5-10名
  2. 【活动报名 | 青源Talk第3期】DenseNet发明者黄高:面向边缘设备的轻量神经网络...
  3. 物联网平台 源码_国内首个智慧交通物联网平台发布
  4. MyBatis Generator分页插件RowBoundsPlugin坑
  5. 解决:无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名
  6. CSDN 博客 美化 个性化
  7. 利用marked.js写个简单Markdown编辑器(1)
  8. testng_TestNG超时示例
  9. 转载【C++】int转换为string的两种方法(to_string、字符串流)
  10. Windows下本地或局域网下搭建SVN服务器
  11. oracle取较小数,oracle 取小数位数
  12. 基于Android系统的智能社区平台系统APP设计与实现(含论文)
  13. 好家伙,公司服务器直接热崩掉了!
  14. OpenHarmony成长计划学生挑战赛7天打卡活动介绍
  15. mysql 事物隔离界别_MySQL锁与事务隔离级别
  16. 计算机科学主题 一亩三分地 考试 中心 满分95大米 (只适用于2019年 之后注册的新人) 答案
  17. 手机号码合法性 java_Java正则表达式——验证手机号码符合性
  18. 【PWN系列】格式化字符串在bss段上的处理
  19. 【C语言进阶】从入门到入土(数据的存储)
  20. php rsa公钥加密,PHP RSA加密

热门文章

  1. 【MySQL】Navicat连接mysql出现1862错误
  2. 【Ubuntu】16.04服务器:驱动更新+cuda11+cudnn
  3. win10桌面任务栏透明
  4. 【学习日记】初次使用golang记录
  5. 华为WATCH GT Runner手表全天健康管理,新护航
  6. 【鸿蒙】数据管理--关系型数据库
  7. linux磁盘格式有哪几种,硬盘的格式都有哪些?哪一种比较好都有什么区别?
  8. 《美国语文2》Lesson 1 Evening at Home
  9. 江小白包装设计原型_从“江小白”酒谈品牌外包装设计欣赏趋势
  10. UAV-Altizure使用教程