Waterloo University 2002

北极的某区域共有 n 座村庄,每座村庄的坐标用一对整数 (x,,y) 表示。为了加强联系,决定在村庄之间建立通讯网络。通讯工具可以是无线电收发机,也可以是卫星设备。所有的村庄都可以拥有一部无线电收发机, 且所有的无线电收发机型号相同。但卫星设备数量有限,只能给一部分村庄配备卫星设备。

不同型号的无线电收发机有一个不同的参数 d,两座村庄之间的距离如果不超过 d 就可以用该型号的无线电收发机直接通讯,d 值越大的型号价格越贵。拥有卫星设备的两座村庄无论相距多远都可以直接通讯。

现在有 k 台卫星设备,请你编一个程序,计算出应该如何分配这 k 台卫星设备,才能使所拥有的无线电收发机的 d 值最小,并保证每两座村庄之间都可以直接或间接地通讯。

例如,对于下面三座村庄:

其中 |AB|= 10, |BC|= 20, |AC|= 10\sqrt{5}≈22.36∣AB∣=10,∣BC∣=20,∣AC∣=105​≈22.36

如果没有任何卫星设备或只有 1 台卫星设备 (k=0 或 k=1),则满足条件的最小的 d = 20,因为 A 和 B,B和 C 可以用无线电直接通讯;而 A 和 C 可以用 B 中转实现间接通讯 (即消息从 A 传到 B,再从 B 传到 C);

如果有 2 台卫星设备 (k=2),则可以把这两台设备分别分配给 B 和 C ,这样最小的 d 可取 10,因为 A 和 B 之间可以用无线电直接通讯;B 和 C 之间可以用卫星直接通讯;A和 C 可以用 B 中转实现间接通讯。

如果有3 台卫星设备,则A,B,C 两两之间都可以直接用卫星通讯,最小的 d 可取 0。

输入格式

第一行为由空格隔开的两个整数 n,k;

第 2∼n+1 行,每行两个整数,第 i 行的xi​,yi​ 表示第i 座村庄的坐标 (xi​,yi​)。

输出格式

一个实数,表示最小的 d 值,结果保留 2 位小数。

样例

样例输入

3 2
10 10
10 0
30 0

样例输出

10.00

数据范围与提示

对于全部数据,1≤n≤500,0≤x,y≤10^4,0≤k≤100。

_________________________________________________________________

最小生成树,由于可以用卫星联系就是不用形成树,只要去最小的边,形成n-m+1个联通分量就可以了。最后取的边的长度就是答案。

________________________________________________________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=505;
4 struct edge
5 {
6 int u,v;
7 double w;
8 }e[maxn*maxn];
9 int js,n,m,cnt;
10 int x[maxn],y[maxn];
11 void addage(int u,int v,double dis)
12 {
13 e[js].u=u;e[js].v=v;e[js++].w=dis;
14 }
15 double dis(int i,int j)
16 {
17 return sqrt((double)(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
18 }
19 bool mycmp(edge a,edge b)
20 {
21 return a.w<b.w;
22 }
23 int f[maxn];
24 int find(int x)
25 {
26 if(f[x]==x)return x;
27 return f[x]=find(f[x]);
28 }
29 int main()
30 {
31 scanf("%d%d",&n,&m);
32 for(int i=1;i<=n;++i)
33 {
34 scanf("%d%d",x+i,y+i);
35 for(int j=1;j<i;++j)
36 addage(i,j,dis(i,j));
37 }
38 sort(e,e+js,mycmp);
39 for(int i=1;i<=n;++i)f[i]=i;
40 for(int i=0;i<js;++i)
41 {
42 int a=find(e[i].u),b=find(e[i].v);
43 if(a!=b)
44 {
45 f[a]=b;
46 cnt++;
47 if(cnt==n-m)
48 {
49 printf("%.2lf",e[i].w);
50 break;
51 }
52 }
53 }
54 return 0;
55 }

LOJ10065 北极通讯站的更多相关文章

  1. LOJ#10065. 「一本通 3.1 例 2」北极通讯网络

    题目链接:https://loj.ac/problem/10065 题目描述 原题来自:Waterloo University 2002 北极的某区域共有 nnn 座村庄,每座村庄的坐标用一对整数 ( ...

  2. iOS 根据经纬度计算与地理北极夹角

    http://www.aiuxian.com/article/p-2767848.html #define toDeg(X) (X*180.0/M_PI) /**  * @method 根据两点经纬度 ...

  3. LOJ P10065 北极通讯网络 题解

    每日一题 day39 打卡 Analysis 1.当正向思考受阻时,逆向思维可能有奇效. 2.问题转化为:找到最小的d,使去掉所有权值>d的边之后,连通支的个数<k; 3.定理:如果去掉所 ...

  4. GitHub 将源代码保存在北极洞穴,至少使用 1000 年!

    最近,GitHub分享了开放Arctic Code Vault的计划,该计划旨在存储和保存Flutter和TensorFlow等开源软件. 所有开放源代码项目的代码都将存储在胶片上,该胶片每帧包含88 ...

  5. [暑假集训Day1T2]北极通讯网络

    这题主要考察对“卫星电话”的理解,k个卫星电话相当于可以让k个联通块保持联通,因此我们只需要让原图连成k个联通块,然后给每个联通块的任意一个节点发一部卫星电话即可.因此我们需要连n-k条边,特别地,当 ...

  6. Arctic Network(洛谷)--北极通讯网络(loj)

    洛谷传送门 loj传送门 一道蛮基础的最小生成树的题 题意也没绕什么圈子 只是叙述的有点累赘而已(loj上是这样的 也就读入加建边需要稍稍稍多想一下下 对于我这么一个蒟蒻 这是一道很好的板子题 (洛谷 ...

  7. MyTerm入选北极代码库计划,喜获「Arctic Code Vault Contributor」勋章

  8. Atitit.uke 团队建设的组织与运营之道attilax总结

    Atitit.uke 团队建设的组织与运营之道attilax总结 1. intro引言:2 2. aims组织成立宗旨2 1.1. Mission组织使命2 1.2. val核心价值观2 1.3. c ...

  9. Good Bye 2016

    A - New Year and Hurry (water) #include <bits/stdc++.h> using namespace std; int main() { ]; ; ...

随机推荐

  1. hive向es推送数据

    第一步:首先要保证网络是通的,很多公司里子网遍布,要和运维和工程侧同事确认好网络是通的,es的地址可以通过curl es地址的方式测试一下. 第二步:下载需要的jar包,必须的是es-hadoop的包 ...

  2. maven打包,跳过生成javadoc

    有时候由于代码中注释错误(比如方法参数)或者maven javadoc插件版本有问题,导致打包报错,而我们着急打包验证问题,没有时间一一修改错误,这时候可以先跳过生成javadoc,继续下一步工作. ...

  3. Python & Matplotlib: Monte Carlos Method

    Hey! 这里是Lindy:) Hope you guys are doing well! 今天想记录的概念叫做 蒙特·卡罗 方法,是今年在cs课上老师做的扩展延伸.其实我在初次接触这个概念时觉得很新 ...

  4. hadoop大数据组件启动

    1.1.启动集群 sbin/start-dfs.sh注:这个启动脚本是通过ssh对多个节点的namenode.datanode.journalnode以及zkfc进程进行批量启动的. 1.2.启动Na ...

  5. HIve中 datediff,date_add和date_sub的用法

    1.日期比较函数:datediff语法:datediff(string enddate,string startdate) 返回值:int 说明:返回结束日期减去开始日期的天数. 例如: hive&g ...

  6. sparkStreaming实时数据处理的优化方面

    1.并行度 在direct方式下,sparkStreaming的task数量是等于kafka的分区数,kakfa单个分区的一般吞吐量为10M/s 常规设计下:kafka的分区数一般为broken节点的 ...

  7. ABP vNext 审计日志获取真实客户端IP

    背景 在使用ABP vNext时,当需要记录审计日志时,我们按照https://docs.abp.io/zh-Hans/abp/latest/Audit-Logging配置即可开箱即用,然而在实际生产 ...

  8. shellSyntax.md

    shell #! /bin/bash 头文件 echo -e 若字符串出现特殊字符,则特别处理      -n 不要在最后自动换行     ./filename.sh sh filename.sh r ...

  9. Mirai qq机器人 c++版sdk(即用c++写mirai)

    Mirai机器人c++版 前言 类似教程 本文git,gitee地址 c++开发mirai 原理 大概流程 实现 如何使用 注意事项 常见错误 前言 改分支版本以及过时,暂时不再维护 请看最新版kot ...

  10. Scrapy使用RabbitMQ做任务队列

    前言 一个月没更博客了,这个月也搞了不少东西,但是公司对保密性要求挺高,很多东西都没有办法写出来 想来想去,还是写一篇最近写Scrapy中遇到的跳转问题 如果你的业务需求是遇到301/302/303跳 ...