蓝桥杯 村庄户户通电问题

蓝桥杯省模拟之小明村庄通电 C++暴力实现 写在前面 这是一道蓝桥杯省模拟题因为我还不会动态规划解决这个问题 所以模拟的时候我直接暴力解决,可能会突破时间限制,等以后对动归很熟悉了,在更新这篇文章,以下是我当时在模拟的时候暴力解决的算法。如果代码有问题,请私信于我,共同探讨,共同进步。 问题描述 2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。   这一次,小明要帮助 n 个村庄通电,其中 1 号村庄... 阅读详情

问题描述
  2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。
  这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。
  现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。
  小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方,形式化描述为坐标为 (x_1, y_1) 高度为 h_1 的村庄与坐标为 (x_2, y_2) 高度为 h_2 的村庄之间连接的费用为
  sqrt((x_1-x_2)(x_1-x_2)+(y_1-y_2)(y_1-y_2))+(h_1-h_2)*(h_1-h_2)。
  在上式中 sqrt 表示取括号内的平方根。请注意括号的位置,高度的计算方式与横纵坐标的计算方式不同。
  由于经费有限,请帮助小明计算他至少要花费多少费用才能使这 n 个村庄都通电。
输入格式
  输入的第一行包含一个整数 n ,表示村庄的数量。
  接下来 n 行,每个三个整数 x, y, h,分别表示一个村庄的横、纵坐标和高度,其中第一个村庄可以建立发电站。
输出格式
  输出一行,包含一个实数,四舍五入保留 2 位小数,表示答案。
样例输入
4
1 1 3
9 9 7
8 8 6
4 5 4
样例输出
17.41
评测用例规模与约定
  对于 30% 的评测用例,1 <= n <= 10;
  对于 60% 的评测用例,1 <= n <= 100;
  对于所有评测用例,1 <= n <= 1000,0 <= x, y, h <= 10000。

题解
通过阅读题面了解到是最小生成树的模板题。接收完数据后,需要通过题目给出的公式算出两点之间的权重,结果保存到一个邻接矩阵里(稠密图)。最后使用普里姆算法,设置第一个结点为起点,求出最小生成树。最后将所有边的权值加起来就是答案。输出可以使用printf("%.2f")格式化输出,最自动四舍五入。

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#define N 1001
#define WHITE 0
#define GRAY 1
#define BLACK 2
#define INFTY 1 << 21

using namespace std;

double M[N][N], d[N];
int color[N], p[N], n;
struct Node {
  double x, y, h;
} arr[N];

void prim () {
  for (int i = 0; i < N; i++) {
    color[i] = WHITE;
    d[i] = INFTY;
  }

  d[0] = 0;
  p[0] = -1;

  int mincost, u;
  
  while (1) {
    mincost = INFTY;
    
    for (int i = 0; i < n; i++) {
      if (color[i] != BLACK && d[i] < mincost) {
        mincost = d[i];
        u = i;
      }
    }

    if (mincost == INFTY)
      break;

    color[u] = BLACK;

    for (int v = 0; v < n; v++) {
      if (color[v] != BLACK && M[u][v]) {
        d[v] = M[u][v];
        p[v] = u;
        color[v] = GRAY;
      }
    }
  }
}

int main () {
  cin >> n;

  double x, y, h;
  
  for (int i = 0; i < n; i++) {
    cin >> x >> y >> h;
    arr[i].x = x;
    arr[i].y = y;
    arr[i].h = h;
  }

  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i == j)
        M[i][j] = 0;
      else {
        x = (arr[i].x - arr[j].x) * (arr[i].x - arr[j].x);
        y = (arr[i].y - arr[j].y) * (arr[i].y - arr[j].y);
        h = (arr[i].h - arr[j].h) * (arr[i].h - arr[j].h);
        M[i][j] = sqrt(x + y) + h;
      }
    }
  }

  prim();

  double ans = 0;
  for (int i = 0; i < n; i++)
    ans += d[i];

  printf("%.2f", ans);

  return 0;
}

原文链接:https://segmentfault.com/a/1190000021670648

蓝桥杯:通电 2015 年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。 这一次,小明要帮助 n个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。 现在,这 n个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。 小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方,形式化描述为坐标为(x1​,y 阅读详情

相关推荐

蓝桥杯python 户户通电问题

户户通电 题目 问题描述 2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。   这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。   现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。   小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方,形式化描述为坐标为 (x_1, y_1) 高度为

肥学的博客 269

Java 第十一届 蓝桥杯 省模拟赛 户户通电(图算法)

户户通电 题目 问题描述 2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。   这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。   现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。   小明测量了所有村庄的位置(坐标)和高度,如果要连...

南 墙 1万+

高通camx架构学习(零)—— 深入理解Camera 硬件抽象层

从上面的定义可以看出,主要是通过hw_module_t 代表了模块,通过其open方法用来打开一个设备,而该设备是用hw_device_t来表示,其中除了用来关闭设备的close方法外,并无其它方法,由此可见谷歌定义的HAL接口,并不能满足绝大部分HAL模块的需要,所以谷歌想出了一个比较好的解决方式,那便是将这两个基本结构嵌入到更大的结构体内部,同时在更大的结构内部定义了各自模块特有的方法,用于实现模块的功能,这样,一来对上保持了HAL的统一规范,二来也扩展了模块的功能。

图像学习之旅 1668

第十一届蓝桥杯校内赛/校内选拔赛(2020蓝桥杯校选3-java/c)

一、问题描述   在计算机存储中,15.125GB是多少MB? 答案提交   这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 二、问题描述   一个数被称为质数(或素数)是指除开1和它本身两个约数外,没有其他的约数。   在不超过10000的数中,一共有多少个质数? 答案提交   这是一道结果填空的题,你只需要算出结...

qq_44036324的博客 5207

ArcGIS中利用DEM数据生成地形图既视感的等高线;利用掩膜进行等高线注记;DEM的可视化表达总结

文章目录前言一、效果图展示二、地形(DEM)可视化表达1.一维可视化2.二维可视化2.三维可视化二、ArcGIS中利用DEM数据制作等高线2.三维可视化2.三维可视化2.三维可视化2.三维可视化二、ArcGIS中利用DEM数据制作等高线2.三维可视化2.三维可视化2.三维可视化总结 前言 最近老师布置作业:DEM的可视化表达。想做一个等高线地形图那样、看起来高级一点的等高线,可是我看网上大多数教程都只展示了【等值线】工具,做出来效果都一般。我自认为自己做出来的效果还可以,把步骤分享给大家。 一、

pink_pig__的博客 5万+

Keil 编译输出信息分析:Program size: Code, RO-data , RW-data, ZI-data

一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在 MCU 不同的存储区。如图所示,在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息。

qq_40305944的博客 4576

2020蓝桥杯省赛模拟 第九题

问题描述   2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。   这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。   现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。   小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄...

淋雨一直走的博客 1554

Cocos Creator 3D音频定位实战:从原理到沉浸感实现

3D音频定位是游戏开发中实现沉浸感的关键技术,其核心原理基于HRTF(头部相关传输函数)模型,模拟声音在空间中的传播与双耳感知差异。这项技术通过赋予声音空间坐标、距离衰减和方向属性,将音频从背景元素提升为可交互的环境线索,极大增强了虚拟世界的真实感与玩家的空间认知。在工程实践中,开发者需要深入理解声源、听者、衰减曲线与多普勒效应等基础概念,并合理运用音频池、优先级管理与动态混音等技术手段来平衡效果与性能。对于Cocos Creator开发者而言,无论是使用引擎原生的AudioSource组件构建轻量级方案,

weixin_30972263的博客 291

每日一题---村庄建设

问题描述 2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。 小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄...

九霄云客的博客 683

NVIDIA Tao Toolkit环境配置踩坑

请搭配食用该文章为 Tao 安装中可能出现的问题进行解答,如果存在本文章中没出现的问题,欢迎提问,由我复现后更新文章。由于大部分云服务器厂商不能支持 docker,因此我使用的环境为2023年5月27日在平台租的 3080 旧版环境进行实验。

qq_36630208的博客 771

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

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

[蓝桥杯]通电

摘要:本文描述了一个村庄通电的最小生成树问题,要求将n个村庄通过电线连通,其中1号村庄为发电站。连接费用包括平面欧式距离和高度差的平方。采用Prim算法求解,时间复杂度O(n²)。C++实现中,计算费用时注意浮点精度,输出保留两位小数。测试样例验证了算法正确性,总费用17.41。针对大规模数据建议使用堆优化Prim算法,并注意处理边界情况如单村庄或未连通村庄。(150字)

qq_2937655951的博客 756

硅基半导体量子点:单电子自旋量子比特技术手册

现在我们已经了解了从硅片到容错计算的全部环节,让我们用一张总览图把碎片拼成完整拼图。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;important;important;important;color:#000!important;important;important;important;important;color:#000!

VectorShift的博客 367

蓝桥杯模拟赛——村庄通电

题目介绍 问题描述 2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家 通电。 这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足 够所有村庄使用。 现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄, 使得所有村庄都直接或间接的与发电站相通。 小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄...

qq_41421658的博客 629

13、使用 Mathematica 撰写文本

本文详细介绍了如何使用 Mathematica 进行文本撰写与处理。内容涵盖文本输入、格式设置、结构化排版、超链接插入、翻译与拼写检查工具的使用,以及将笔记本导出为多种格式(如 PDF、HTML、LATEX 和 RTF)的方法。通过实例演示了创建专业文档的完整流程,包括样式设置、公式推导、标题编号、页眉页脚配置等操作。适合希望利用 Mathematica 编写学术论文、技术报告或教学资料的用户参考。

sony5的博客 208

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【通电】第十一届蓝桥杯省赛第二次模拟(并查集+Kruskal)

2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。

KI的博客 9万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java蓝桥杯练习 村村通电

java蓝桥杯练习 村村通电 问题描述   2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。   这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。   现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。   小明测量了所有村庄的位置(坐标...

kobe_cb的博客 688

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

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

蓝桥杯练习赛——小明村庄通电

2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。   这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。   现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。   小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两...

伊维的笔记本 476

2020年十一届省赛蓝桥杯本科模拟赛第九题解 村庄通电

第九题:村庄通电 2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。小明测量了所有村庄的位置(坐标)和高度。如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的方,形式化描述为坐标为 (x_1, y_1) 高度为 h_1 的村庄与坐标为 (

Rlynn的博客 334

蓝桥杯 17. 通电

个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接地与发电站相通。作为一名电力建设者,小明正在帮助一带一路上的国家通电。其中 (x1, y1, h1) 和 (x2, y2, h2) 分别是两个村庄的坐标和高度。个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。小明测量了所有村庄的位置(坐标)和高度。把所有边都连接起来,然后在这个完全图里面找最小生成树。请帮助小明计算使所有村庄通电所需的最小费用。输出一行一个实数,表示最小通电费用,

wuqingshun314159的博客 677

蓝桥杯模拟赛2021最小生成树-通电-模板题

蓝桥杯模拟赛2021最小生成树-通电-模板题题目 题目 J 题: 问题描述   2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。   这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。   现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。   小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的

BOWWOB的博客 922

【蓝桥杯】162 通电(最小生成树)

作为一名电力建设者,小明正在帮助一带一路上的国家通电。这一次,小明要帮助n个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。 现在,这n个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。 小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方。由于经费有限,请帮助小明计算他至少要花费多少费用才能使这n个村庄都通电。

Robin Hu的专栏 715
上一篇: scanf函数居然有返回值?
下一篇: 关于冒泡算法的那些事儿
凌晨里的无聊人
博客等级 码龄8年 2320粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值