题目描述

国防部计划用无线网络连接若干个边防哨所。2 种不同的通讯技术用来搭建无线网络;

每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。

任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过 DD,这是受收发器的功率限制。收发器的功率越高,通话距离 DD 会更远,但同时价格也会更贵。

收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话说,每一对哨所之间的通话距离都是同一个 DD。你的任务是确定收发器必须的最小通话距离 DD,使得每一对哨所之间至少有一条通话路径(直接的或者间接的)。

输入格式

从 wireless.in 中输入数据第 1 行,2 个整数 SS 和 PP,SS 表示可安装的卫星电话的哨所数,PP 表示边防哨所的数量。接下里 PP 行,每行两个整数 x,yx,y 描述一个哨所的平面坐标 (x, y)(x,y),以 km 为单位。

输出格式

输出 wireless.out 中

第 1 行,1 个实数 DD,表示无线电收发器的最小传输距离,精确到小数点后两位。

输入输出样例

输入 #1复制

2 4
0 100
0 300
0 600
150 750

输出 #1复制

212.13

说明/提示

对于 20\%20% 的数据:P = 2,S = 1P=2,S=1

对于另外 20\%20% 的数据:P = 4,S = 2P=4,S=2

对于 100\%100% 的数据保证:1 ≤ S ≤ 1001≤S≤100,S < P ≤ 500S<P≤500,0 ≤ x,y ≤ 100000≤x,y≤10000。

#include<bits/stdc++.h>
using namespace std;
int s,p,n;
long long len;
const int MaxN=1001;
const int MaxM=1000001;
int total;
struct node
{int b;int e;float w;
}edge[MaxM];
int par[MaxM];
int num1[100001];
int num2[100001];
float ans;
int Find(int *par,int f)
{while(par[f]>0){f=par[f];}return f;
}
bool cmp(node a,node b)
{return a.w<b.w;
}
void Kru()
{sort(edge+1,edge+n+1,cmp);int x,y;for(int i=1;i<=n;i++){x=Find(par,edge[i].b);y=Find(par,edge[i].e);if(x!=y){par[x]=y;total++;ans=edge[i].w;//寻找要添加的无线电收发器的最小传输距离}if(total>=p-s) break;//当添加边的总数大于等于p-s时,循环结束}
}
int main()
{cin>>s>>p;for(int i=1;i<=p;i++){cin>>num1[i]>>num2[i];for(int j=1;j<i;j++){n++;//记录有多少路径edge[n].b=i;edge[n].e=j;edge[n].w=sqrt((num1[i]-num1[j])*(num1[i]-num1[j])+(num2[i]-num2[j])*(num2[i]-num2[j]));//计算每个顶点之间的距离,添加边权}}Kru();printf("%.2f",ans);//输出最小传输距离
}

给定 nn 个点的坐标,第 ii 个点的坐标为 (x_i,y_i)(xi​,yi​),这 nn 个点编号为 11 到 nn。给定 mm 条边,第 ii 条边连接第 u_iui​ 个点和第 v_ivi​ 个点。现在要求你添加一些边,并且能使得任意一点都可以连通其他所有点。求添加的边的总长度的最小值。

输入格式

* Line 1: Two space-separated integers: N and M

* Lines 2..N+1: Two space-separated integers: Xi and Yi

* Lines N+2..N+M+2: Two space-separated integers: i and j, indicating that there is already a road connecting the farm i and farm j.

第一行两个整数 n,mn,m 代表点数与边数。
接下来 nn 行每行两个整数 x_i,y_ixi​,yi​ 代表第 ii 个点的坐标。
接下来 mm 行每行两个整数 u_i,v_iui​,vi​ 代表第 ii 条边连接第 u_iui​ 个点和第 v_ivi​ 个点。

输出格式

* Line 1: Smallest length of additional roads required to connect all farms, printed without rounding to two decimal places. Be sure to calculate distances as 64-bit floating point numbers.

一行一个实数代表添加的边的最小长度,要求保留两位小数,为了避免误差, 请用 6464 位实型变量进行计算。

输入输出样例

输入 #1复制

4 1
1 1
3 1
2 3
4 3
1 4

输出 #1复制

4.00

说明/提示

数据规模与约定

对于 100\%100% 的整数,1 \le n,m \le 10001≤n,m≤1000,1 \le x_i,y_i \le 10^61≤xi​,yi​≤106,1 \le u_i,v_i \le n1≤ui​,vi​≤n。

说明

Translated by 一只书虫仔。

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
long long cnt;
const int MaxN=1001;
const int MaxM=1000001;
int total;
double ans,len;
int num1[MaxM];
int num2[MaxM];
int a,c;
struct node
{int b;int e;double w;
}edge[MaxM];
int par[MaxM];
int Find(int *par,int f)
{while(par[f]>0){f=par[f];}return f;
}
bool cmp(node a,node b)
{return a.w<b.w;
}
void Kru()
{sort(edge+1,edge+cnt+1,cmp);int x,y;for(int i=1;i<=cnt;i++){x=Find(par,edge[i].b);y=Find(par,edge[i].e);if(x!=y){par[x]=y;len+=edge[i].w;//计算加边的总长度total++;}if(total>=n-1) break;}
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++){//输入点的坐标cin>>num1[i]>>num2[i];}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){cnt++;edge[cnt].b=i;//起点edge[cnt].e=j;//终点edge[cnt].w=(double)sqrt((double)(num1[i]-num1[j])*(num1[i]-num1[j])+(double)(num2[i]-num2[j])*(num2[i]-num2[j]));//注意加double}}for(int i=1;i<=m;i++){cin>>a>>c;cnt++;//路径数目edge[cnt].b=a;edge[cnt].e=c;edge[cnt].w=0.0;}Kru();printf("%.2lf",len);
}

2022.02.17学习总结(最小生成树)相关推荐

  1. 22/02/17学习笔记

    知识回顾 ###(1)hadoop简介 数据存储与数据计算 hdfs :通过分布式文件存储对数据进行存储: MapReduce:通过MapReduce进行数据的计算: (2)hadoop生态圈简介 实 ...

  2. 2022.1.17 学习笔记 (SPN中业务是如何传输的,主要是业务切片的调度编排)

    一.SPN简介 SPN 技术是一种基于 SDN 架构.具有硬切片特性的的时分复用技术,具有高效的路由分配.多通道聚合,不同业务间的网络切片,以及低时延的交换的特点.SPN 架构上分为 SPL层,SCL ...

  3. 2022.02.09_Java学习总结_网络编程、正则表达式

    1. 网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接, ...

  4. 2022.02.11学习总结(kmp)

    题意翻译 Amugae有n个单词,他想把这个n个单词变成一个句子,具体来说就是从左到右依次把两个单词合并成一个单词.合并两个单词的时候,要找到最大的i(i\ge 0)i(i≥0),满足第一个单词的长度 ...

  5. 2022.1.17学习总结

    目录 CF18B Platforms 题目描述 输入格式 输出格式 题意翻译 输入输出样例 思路 代码实现 CF30B Codeforces World Finals 题目描述 输入格式 输出格式 题 ...

  6. 2022.02.10_Java学习总结_新特性

    1. Lambda表达式 1.1 介绍 Lambda表达式是一种没有名字的函数,也可称为闭包,是Java 8 发布的最重要新特性. 本质上是一段匿名内部类,也可以是一段可以传递的代码. 还有叫箭头函数 ...

  7. 用VScode编写LaTex-最新教程2022/4/17

    2022/4/17日更新内容 新版vscode对于原来的配置,反向搜索失效 更新代码. vscode需要修改或添加的配置 "latex-workshop.view.pdf.viewer&qu ...

  8. 《安富莱嵌入式周报》第254期:2022.02.21--2022.02.27

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  9. 时间管理(李葆春教授,2022.8.17)

    Source: weibo Time: 2022.8.17 18:02 几个月前,有个朋友曾经提到回头会在微博上问我一个有关「时间管理」的问题.直到现在这个问题也没有等来,我想要不然先聊起来,等问题来 ...

  10. 2022.4.30—2022.6.22 学习报告

    目录 2022.4.30 2022.5.2 数据流图(Dataflow Graph) Sesssion 构建计算图 2022.5.3 Deep Label Distribution Learning ...

最新文章

  1. Binder跨进程通信原理(一):动态内核加载模块
  2. [javaweb] servlet的生命周期 (二)
  3. SQL Server XML性能优化(Best Practices)
  4. 深度学习(二十一)——SRCNN, DRCN, VDSR
  5. hashtable与HashMap区别
  6. 放弃Eclipse Juno
  7. 电大计算机网络网考,电大计算机网络(本)学习周期01任务A_0009答案
  8. ad域需要自建dns服务器吗,创建AD DS域服务(图文详解)
  9. jsp脚本、jsp标准动作、EL表达式、JSTL标签
  10. Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传
  11. 老员工恳请加薪,老板“不愿意做就辞职”
  12. 最是人间四月天,细雨点洒樱花前
  13. Python实现最近邻nearest、双线性bilinear、双三次bicubic插值
  14. Windows 打开和关闭默认共享方法汇总
  15. Python基础知识(二):序列结构---字符串、 列表、 元组、 字典、 集合
  16. 收音机设计与制作漫谈——高频电路之最优化
  17. 展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
  18. 【原】Java学习笔记025 - 内部类
  19. Holder不等式 Minkowski不等式
  20. Android Gradle权威指南

热门文章

  1. 相对url和相对路径
  2. 火狐浏览器配置xpath
  3. 单细胞多组学联合应用
  4. kubeedge源码分析
  5. 12C中CDB和PDB的一些概念
  6. 华硕a550jk4200公版显卡驱动适配教程
  7. 比360强力删除还暴力的删除文件(夹)方法
  8. 微星笔记本电脑安装Linux(Ubuntu)系统–失败
  9. 博士申请 | 美国佛罗里达州立大学王广老师招收人工智能全奖博士生
  10. 基于MATLAB的AM信号调制解调代码,代码)基于MATLAB的AM调制解调系统仿真报告