2022.02.17学习总结(最小生成树)
题目描述
国防部计划用无线网络连接若干个边防哨所。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学习总结(最小生成树)相关推荐
- 22/02/17学习笔记
知识回顾 ###(1)hadoop简介 数据存储与数据计算 hdfs :通过分布式文件存储对数据进行存储: MapReduce:通过MapReduce进行数据的计算: (2)hadoop生态圈简介 实 ...
- 2022.1.17 学习笔记 (SPN中业务是如何传输的,主要是业务切片的调度编排)
一.SPN简介 SPN 技术是一种基于 SDN 架构.具有硬切片特性的的时分复用技术,具有高效的路由分配.多通道聚合,不同业务间的网络切片,以及低时延的交换的特点.SPN 架构上分为 SPL层,SCL ...
- 2022.02.09_Java学习总结_网络编程、正则表达式
1. 网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接, ...
- 2022.02.11学习总结(kmp)
题意翻译 Amugae有n个单词,他想把这个n个单词变成一个句子,具体来说就是从左到右依次把两个单词合并成一个单词.合并两个单词的时候,要找到最大的i(i\ge 0)i(i≥0),满足第一个单词的长度 ...
- 2022.1.17学习总结
目录 CF18B Platforms 题目描述 输入格式 输出格式 题意翻译 输入输出样例 思路 代码实现 CF30B Codeforces World Finals 题目描述 输入格式 输出格式 题 ...
- 2022.02.10_Java学习总结_新特性
1. Lambda表达式 1.1 介绍 Lambda表达式是一种没有名字的函数,也可称为闭包,是Java 8 发布的最重要新特性. 本质上是一段匿名内部类,也可以是一段可以传递的代码. 还有叫箭头函数 ...
- 用VScode编写LaTex-最新教程2022/4/17
2022/4/17日更新内容 新版vscode对于原来的配置,反向搜索失效 更新代码. vscode需要修改或添加的配置 "latex-workshop.view.pdf.viewer&qu ...
- 《安富莱嵌入式周报》第254期:2022.02.21--2022.02.27
往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...
- 时间管理(李葆春教授,2022.8.17)
Source: weibo Time: 2022.8.17 18:02 几个月前,有个朋友曾经提到回头会在微博上问我一个有关「时间管理」的问题.直到现在这个问题也没有等来,我想要不然先聊起来,等问题来 ...
- 2022.4.30—2022.6.22 学习报告
目录 2022.4.30 2022.5.2 数据流图(Dataflow Graph) Sesssion 构建计算图 2022.5.3 Deep Label Distribution Learning ...
最新文章
- Binder跨进程通信原理(一):动态内核加载模块
- [javaweb] servlet的生命周期 (二)
- SQL Server XML性能优化(Best Practices)
- 深度学习(二十一)——SRCNN, DRCN, VDSR
- hashtable与HashMap区别
- 放弃Eclipse Juno
- 电大计算机网络网考,电大计算机网络(本)学习周期01任务A_0009答案
- ad域需要自建dns服务器吗,创建AD DS域服务(图文详解)
- jsp脚本、jsp标准动作、EL表达式、JSTL标签
- Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传
- 老员工恳请加薪,老板“不愿意做就辞职”
- 最是人间四月天,细雨点洒樱花前
- Python实现最近邻nearest、双线性bilinear、双三次bicubic插值
- Windows 打开和关闭默认共享方法汇总
- Python基础知识(二):序列结构---字符串、 列表、 元组、 字典、 集合
- 收音机设计与制作漫谈——高频电路之最优化
- 展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
- 【原】Java学习笔记025 - 内部类
- Holder不等式 Minkowski不等式
- Android Gradle权威指南