<考试题> bzoj 1821 部落划分 (二分、最小生成树)

GD32F303驱动ILI9341屏:从软件SPI到硬件SPI+DMA的波形实测与避坑指南 本文详细解析了GD32F303驱动ILI9341屏幕时SPI波形优化的关键技术与调试方法。通过对比软件SPI、硬件SPI及硬件SPI+DMA三种模式的波形特征,揭示了连续波形驱动失败的原因,并提供了硬件优化方案和DMA分块传输技巧,最终实现42fps的刷屏速率。 阅读详情

*PS:竟然CCCCCE了(눈‸눈)

go to the problem

Description

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

Input

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

Output

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

Sample Input

4 2

0 0

0 1

1 1

1 0

Sample Output

1.00

Solution 1 二分答案+并查集验证

二分两个最近部落的距离,对于距离小于mid的两个点就把他们合并,最后统计一下联通块个数是否大于等于k,true就调整右边界,不然就调整左边界。

代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int N,K;
int fa[1010],used[1010];
double r=-1;
double a[1010][1010];
struct maple{
    int x,y;
}ship[1010];

int find(int x)
{
    return fa[x]==x?x:fa[x]=find(fa[x]);
}
bool can(double q)
{
    int k=0;
    for(int i=1;i<=N;++i) fa[i]=i,used[i]=0;
    for(int i=1;i<=N;++i)
      for(int j=i+1;j<=N;++j)
         if(a[i][j]<q)
         {
             int x=find(i),y=find(j);
             if(x!=y) fa[x]=y;
         }
    for(int i=1;i<=N;++i)
    {
        int x=find(i);
        if(!used[x])
        {
            used[x]=1;
            ++k;
        }
    }
    if(k>=K) return true;
    else return false;
}
int main()
{
    scanf("%d%d",&N,&K);
    for(int i=1;i<=N;++i)
        scanf("%d%d",&ship[i].x,&ship[i].y);
    for(int i=1;i<=N;++i)
      for(int j=i+1;j<=N;++j)
      {
          a[i][j]=sqrt(pow((double)ship[i].x-ship[j].x,2)+pow((double)ship[i].y-ship[j].y,2));//强转,不然会ce
          r=max(r,a[i][j]);
      }
    double l=0;
    while(l+0.0001<r) //0.001 会wa
    {
        double mid=(l+r)/2;
        if(can(mid)) l=mid;
        else r=mid;
    }
    printf("%.2lf",l);
    return 0;
}

Solution 2 最小生成树

(摘自题解,侵删)
首先处理出任意两点间的距离,这时的答案就是其中最短的距离,我们把距离最短的两点合并到一个集合(连边),此时答案又变成剩余的距离中的最短距离,我们再次进行连接……可知答案一定在最小生成树中。
所以我们可以建立一棵最小生成树,来保证每次连边都是不在同一个集合内的两点且之间的距离为当前最小的,直到连接了n-k+1条边。
至于为什么是n-k+1条??
n-k是为了保证能够建成k个集合(已知n-1条边是一棵树,若删去一条边–>n-2是两棵树……那么n-k就是k棵树)
+1的原因是为了保证当前求的这一条边是集合外的边,并不是连接的意思。
这样第n-k+1条边的长度就是答案。

最小生成树例题及其总结 目录: 洛谷 P2820 局域网 POJ 2421 Constructing Roads 洛谷 P1111 修复公路 洛谷 P2700 逐个击破 洛谷 P1197 [JSOI2008]星球大战 洛谷 P2502 [HAOI2006]旅行 关于最小生成树的问题差不多有如下几个: 1.模板(加一点修改,比如给的所有边的总边权-最小生成树的总边权或者有些边已经建好,求其他的)如第一 阅读详情

相关推荐

手把手教你用OpenCompass评估Qwen1.5-1.8B模型(含数据集配置详解)

本文提供了使用OpenCompass评估Qwen1.5-1.8B-Chat模型的详细实战教程。内容涵盖从创建独立Python环境、下载模型与核心数据集,到编写配置文件、执行评测命令及解读结果的完整流程。重点解析了模型与数据集的配置细节,并分享了性能调优与常见问题排查方法,旨在帮助开发者快速上手系统化的模型评估。

weixin_29228781的博客 137

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

1821: [JSOI2010]Group 部落划分 Group Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。 不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了N个野人居住的地点(可...

weixin_30918633的博客 275

【IPAM】Netbox docker模式版本升级

NETBOX 是一个开源的网络资源管理系统,主要用于管理 IP 地址、机架、设备、接口等网络资源信息。下面是 NETBOX 的功能、优点和缺点的详细介绍。

u012153104的博客 1329

[JSOJ2010]部落划分

[JSOJ2010]部落划分 题目链接 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。 不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了 nn 个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我们把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。聪聪还获得了一个有意义的

m0_50998977的博客 309

西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践

本文详细解析了西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践。通过实际案例和代码示例,介绍了状态机的基础认知、硬件配置、逻辑开发、调试技巧以及与MES系统集成的高级应用,帮助工程师高效实现设备自动化控制。

weixin_29255731的博客 530

深入解析STM32官方库:.c/.h文件功能与应用场景

本文深入解析了STM32官方库中.c和.h文件的核心功能与应用场景。详细剖析了stm32f10x.h、启动文件、外设驱动文件等关键组件的作用,并通过LED闪烁实战演示了如何构建工程、配置文件和调用库函数。文章旨在帮助开发者理解官方库的架构,掌握高效使用技巧,从而降低STM32开发门槛,提升开发效率与代码质量。

weixin_29189377的博客 351

Mamba-ST实战:用状态空间模型实现艺术风格迁移的5个关键步骤

本文详细介绍了如何使用Mamba-ST状态空间模型实现高效的艺术风格迁移,涵盖环境配置、数据预处理、模型架构、训练策略和推理优化等5个关键步骤。Mamba-ST基于SSM(状态空间模型)构建,在保持生成质量的同时显著降低计算复杂度,为风格迁移领域提供了新的解决方案。

weixin_29163581的博客 354

【题解】洛谷 P4047

我们知道,同一个部落的野人总是生活在附近。我们把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。对于任意一种部落划分的方法,都能够求出两个部落之间的距离,聪聪希望求出一种部落划分的方法,使靠得最近的两个部落尽可能远离。我们先算出边权,然后从小到大排序,然后把小的边划分到一个部落里,这样任意两个部落间的最小距离就一定大于等于这条边。

conti123的博客 277

PCIe 物理层(Physical Layer)详解

PCIe物理层关键技术解析 PCIe物理层作为协议栈底层核心,承担着比特流传输、链路训练与电气特性管理等关键功能。该层采用分层架构,包含逻辑物理层(负责编解码/加扰)和电气物理层(处理信号收发)。关键技术亮点包括: 智能链路管理:通过LTSSM状态机实现11种状态转换,涵盖链路检测(Detect)、协商(Polling/Configuration)、功耗管理(L0s/L1)等全生命周期控制 高效编码方案:Gen1/Gen2采用8b/10b编码(20%开销),Gen3+升级为128b/130b(仅1.5%开销

珂珂可爱多 726

一个最简单的 ALV Tree 树控件例子,无需依赖任何第三方代码

此行代码声明报表程序,程序名称为。在 SAP ABAP 中,报表(report)程序表示该程序具有独立执行、输出及打印功能。在实际开发过程中可根据公司命名规范确定报表名称,例如销售报表、库存报表等。这段代码声明了一个结构类型。id:数据类型为char18,用于存放节点标识符。text:数据类型为char40,用于存放节点显示文本。在实际场景中,例如构造产品目录时,id可以表示产品编号,而text则可以显示产品名称,这样便于用户直观识别。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 623

洛谷 2421 荒岛野人

题目链接 我们先假设两个也人会相遇,设年份为x. (pix+ci)%m=(pjx+cj)%m; pix+ci+my=pjx+cj; (pi-pj)x+my=cj-ci; 若(cj-ci)!=kgcd(pi-pj,m),说明i,j永远不相遇, 若等于但x的最小正整数解>i,j中的寿命最小的,则也不可能相遇, 这样枚举i,j看一看他们是否会相遇。 若都不相遇则输出m #include<cs...

zailingzhe的博客 253

基于TIA博途的一阶滞后滤波+中位值滤波+堆栈平均值滤波算法SCL语言程序(封装FB库)

基于TIA博途的一阶滞后滤波+中位值滤波+堆栈平均值滤波算法SCL语言程序(封装FB库)

Robot_PLC_HMI_Automation 2177

洛谷P4047 [JSOI2010]部落划分

题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。 不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了 n 个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我们把两个部落的距...

zhn_666的博客 375

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【题解】NKOJ——分治练习赛

**A 组队参赛** 问题描述 一年一度的信息学竞赛NK校赛即将开始,何老板在组织安排报名工作。 南开信竞队分为小学、初中、高中三个梯队: 小学梯队有N个队员,年龄分别是 A1A_1A1​,A2A_2A2​…ANA_NAN​ 初中梯队有N个队员,年龄分别是 B1B_1B1​,B2B_2B2​…BNB_NBN​ 高中梯队有N个队员,年龄分别是 C1C_1C1​,C2C_2C2​…CNC_NCN​ 比...

go_bananas的博客 1769

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

洛谷[JSOI2010]部落划分

聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。我们把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。对于任意一种部落划分的方法,都能够求出两个部落之间的距离,聪聪希望求出一种部落划分的方法,使靠得最近的两个部落尽可能远离。输出一行一个实数,为最优划分时,最近的两个部落的距离,精确到小数点后两位。不过好消息是,聪聪得到了一份荒岛的地图。,分别代表了野人居住点的数量和部落的数量。

m0_67286481的博客 223

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

洛谷P4047 [JSOI2010]部落划分题解

洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。 不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了N个野人居住的地点(可以看作是平面上的坐标)。我们知道...

weixin_30340745的博客 475

【JSOI2010】【BZOJ1821】Group 部落划分 Group

Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。 不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了N个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我们把两

CreationAugust is 14 years old forever 1676

算法期考题

中文说明:输入有1+2N行,第一行有两个数组N和K,N代表有N个男人和N个女人,K用于输出结果,接下来的N行为N个男人(编号为0到N-1)的优先级列表,如1 0 代表该男人的优先级中,woman1优先于woman0再接下来的N行为N个女人人(编号同样为0到N-1)的优先级列表,如0 1代表该女人的优先级中man1优先于man1。这个过程的费用记为pa+ pb。1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。

m0_61165897的博客 1278

最小生成树

题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。 题目描述 给你云朵的个数NN,再给你MM个关系,表示哪些云朵可以连在一起。 现在小杉要把所有云朵连成KK个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。 输入格式 第一行有三个数N,M,KN,M,K。 接下来MM行每行三个数X,Y,LX,Y,L,表示XX云和YY云可以通过LL的代价连在一起。 输出格式 ...

qq_52004482的博客 470

最小生成树题一

生成树一 题目描述 给你云朵的个数NN,再给你MM个关系,表示哪些云朵可以连在一起。 现在小杉要把所有云朵连成KK个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。 链接 分析: 经过luogu题解的洗礼,使我懂得了....(病句,记下来,要考的 0.0) 仔细想想哭如斯卡尔的实现过程.... 它一开始实际上就是把每个点看成独立的一棵树,其实每一步建边都保证了当前的所有...

weixin_30814319的博客 434

图的最小生成树——例题

最优布线问题 题目描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了使花费最少,他想铺设最短的光纤去连接所有的农场。 你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。 每两个农场间的距离不...

黑色吊椅的博客 3486

最小生成树基础与习题

目录 图的几个基础概念 Kruskal算法 算法思想 模板 Prim算法 算法思想 模板 例题 A.POJ-1251 Jungle Roads B.POJ-1287 Networking C:POJ-2031 Building a Space Station D:ZOJ-1586 QS Network E:POJ-2349 Arctic...

weixin_43870697的博客 3105

历届试题 城市建设

http://lx.lanqiao.org/problem.page?gpid=T117 历届试题 城市建设 时间限制:1.0s 内存限制:256.0MB 问题描述   栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修。市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他。  C市中有n个比较重要的地点,市长希望这些地点重点被...

weixin_30746117的博客 401

最小生成树(笔记 与 leetcode题目)

最小生成树基本概念leetcode题目题目Kruskal 算法Prim 算法 基本概念 生成树:一个连通图的生成树是含有这个连通图全部顶点的一个极小连通子图。如果连通图 G 的顶点个数为 n ,那么G的生成树的边数 必然为 n-1。无向图的生成树添加一条边,必然形成环。 自由树:不带简单回路的无向图。 简单回路:除了第一个顶点和最后一个顶点之外,其余顶点不重复的回路。 回路/环:第一个顶点和最后一个顶点相同的路径。 网络 :带权的连通图。 有向树:如果一个有向图,只有一个顶点的入度为

weixin_40137369的博客 1939

P4047 [JSOI2010]部落划分(最小生成树)

题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。 不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了N个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我...

weixin_30526593的博客 135
上一篇: <考试题> codevs 5440 运输计划 (二分+lca+dfs序+树上差分)
下一篇: <考试题> codevs 5251 WYW的数字金字塔
Loi_Mapleleaf
博客等级 码龄10年 17粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值