题解:洛谷 P17016 [GESP202606 八级] 线网建设
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P17016 [GESP202606 八级] 线网建设【题目描述】A 市有n nn座基站需要通过线网互相连接。第i ii座基站位于二维平面上坐标( x i , y i ) (x_i, y_i)(xi​,yi​)处。第i ii座基站与第j jj座基站之间的距离定义为( x i − x j ) 2 ( y i − y j ) 2 \sqrt{(x_i - x_j)^2 (y_i - y_j)^2}(xi​−xj​)2(yi​−yj​)2​。如果两座基站之间的距离不超过给定的整数l ll那么可以修建连接这两座基站的线路线路长度为基站间的距离。如果从一座基站出发经过一系列线网中的线路可以到达另一座基站则称这两座基站是互相连接的。请问使得n nn座基站两两之间都互相连接需要修建的线路总长度最小是多少如果不能修建满足条件的线网则输出Impossible。【输入】第一行两个正整数n , l n, ln,l分别表示基站数量与线路长度上限。接下来n nn行每行两个整数x i , y i x_i, y_ixi​,yi​表示基站的坐标。【输出】输出一行。如果能修建满足条件的线网则输出需要修建的最小线路总长度保留两位小数。否则输出Impossible。【输入样例】4 2 1 0 -1 -1 0 0 1 1【输出样例】3.41【核心思想】问题分析给定n nn个基站的二维坐标和一个距离上限l ll只有当两基站间欧几里得距离≤ l \leq l≤l时才能修建线路。要求使所有基站两两连通的最小线路总长度若无法连通则输出Impossible。这是一个**最小生成树MST**问题核心在于从所有可修建线路中选取总长度最小且能连接所有基站的边集。算法选择Kruskal 算法将所有有效边按长度排序用并查集维护连通性贪心选取不形成环的最短边欧几里得距离筛选先计算所有点对距离仅保留≤ l \leq l≤l的边作为候选边关键步骤读入数据读取n , l n, ln,l和基站坐标( x i , y i ) (x_i, y_i)(xi​,yi​)构建有效边集枚举所有基站对( i , j ) (i, j)(i,j)计算欧几里得距离d ( x i − x j ) 2 ( y i − y j ) 2 d \sqrt{(x_i-x_j)^2 (y_i-y_j)^2}d(xi​−xj​)2(yi​−yj​)2​若d ≤ l d \leq ld≤l则加入边集Kruskal 算法将所有有效边按长度升序排序初始化并查集每个基站自成一个连通块遍历排序后的边若两端点不在同一连通块则合并并累加边长若最终选取边数 n − 1 n-1n−1则图不连通输出结果若连通输出总长度保留两位小数否则输出Impossible时间/空间复杂度时间复杂度O ( n 2 log ⁡ n 2 ) O ( n 2 log ⁡ n ) O(n^2 \log n^2) O(n^2 \log n)O(n2logn2)O(n2logn)枚举O ( n 2 ) O(n^2)O(n2)条边排序O ( n 2 log ⁡ n ) O(n^2 \log n)O(n2logn)并查集操作近似O ( 1 ) O(1)O(1)空间复杂度O ( n 2 ) O(n^2)O(n2)存储所有有效边最小生成树与并查集的核心思想贪心选边策略Kruskal 算法基于贪心思想每次选取当前最短且不会形成环的边最终得到全局最优的最小生成树。这一策略的正确性由割性质保证连通性判定通过并查集高效维护连通块信息f i n d findfind操作带路径压缩O ( α ( n ) ) O(\alpha(n))O(α(n))近似常数时间距离筛选预处理题目限制了可修建线路的最大长度先筛选有效边避免在 MST 过程中处理不可用的边不连通判定最小生成树需要恰好n − 1 n-1n−1条边连接n nn个结点若有效边不足以形成n − 1 n-1n−1条边的生成树则图不连通适用于带约束的连通性建设问题、需要在满足限制条件下求最小连接成本的优化类问题【算法标签】#普及 #生成树【代码详解】#includebits/stdc.husingnamespacestd;#defineintlonglongconstintN505,MN*N,INF1e18;// N: 最大点数; M: 最大边数; INF: 无穷大intx[N],y[N];// x[i], y[i]: 第 i 座基站的坐标doublel;// l: 线路长度上限doubleans;// ans: 最小生成树的总长度intn,m;// n: 基站数量; m: 边数未使用intcur;// cur: 当前有效边数intp[N];// p[i]: 并查集中 i 的父节点doublew[N][N];// w[i][j]: 基站 i 和 j 之间的欧几里得距离structEdge// 边结构体{inta,b;// a, b: 边的两个端点doublew;// w: 边的长度booloperator(constEdgeE)const// 重载小于号用于按边长排序{returnwE.w;}}edges[M];// edges: 存储所有有效边intfind(intx)// 并查集查找操作带路径压缩{if(p[x]!x)p[x]find(p[x]);returnp[x];}doublekruskal()// Kruskal 算法求最小生成树{sort(edges1,edgescur1);// 按边长从小到大排序for(inti1;in;i)// 初始化并查集p[i]i;doubleres0;// res: 当前生成树的总长度intcnt0;// cnt: 已选入生成树的边数for(inti1;icur;i)// 遍历所有有效边{intaedges[i].a,bedges[i].b;// 边的两个端点doublewedges[i].w;// 边的长度afind(a),bfind(b);// 查找两个端点所在连通块的根if(a!b)// 如果不在同一连通块加入该边{p[a]b;// 合并两个连通块resw;// 累加边长到总长度cnt;// 边数加一}}if(cntn-1)// 如果边数不足 n-1图不连通returnINF;returnres;}signedmain(){cinnl;// 读入基站数量和线路长度上限for(inti1;in;i)// 读入每座基站的坐标cinx[i]y[i];for(inti1;in;i)// 初始化并查集p[i]i;for(inti1;in;i)// 枚举所有基站对计算距离并筛选有效边for(intji1;jn;j){// 计算欧几里得距离w[i][j]sqrt((x[i]-x[j])*(x[i]-x[j])(y[i]-y[j])*(y[i]-y[j]));if(w[i][j]l)// 如果距离超过上限设为无穷大不可用w[i][j]1e18;elseedges[cur]{i,j,w[i][j]};// 加入有效边集合}doubleanskruskal();// 执行 Kruskal 算法if(ans!INF)// 如果存在最小生成树printf(%.2lf\n,ans);// 输出最小总长度保留两位小数elseprintf(Impossible\n);// 图不连通输出 Impossiblereturn0;}【运行结果】4 2 1 0 -1 -1 0 0 1 1 3.41

相关新闻

AI如何提升实习报告与工作总结的专业性

AI如何提升实习报告与工作总结的专业性

1. 项目背景与痛点解析"百考通"这个项目名称本身就暗示了其核心定位——面向频繁需要撰写各类考核文档的用户群体。在教育与职场场景中,实践报告和实习总结是最常见的两种考核文档类型,也是许多学生和职场新人最头疼的写作任务。我接触过大量实…

2026/7/23 22:48:35 阅读更多 →
《一年中三个课题,我是这样写的》

《一年中三个课题,我是这样写的》

“课题申报有没有套路?有。但套路不是坏事,就像写信有格式、写文章有规范一样——关键是套路里装的是不是真东西。我自己也是花了半年时间,把立项的、没立项的放在一起逐项对比,才摸清门道——说白了就是搞清楚评审在看什么&#…

2026/7/23 22:48:35 阅读更多 →
解决Navicat远程服务器2013 - Lost connection to server at ‘handshake: reading initial communication packet‘,

解决Navicat远程服务器2013 - Lost connection to server at ‘handshake: reading initial communication packet‘,

在远程连接服务器的门槛有这几道:my.cnf配置-mysql.host-服务器防火墙-云服务器厂商防火墙-服务器ssh,这其中通常配好my.cnf配置-mysql.host-服务器ssh即可,其他地方一般是好的,但是我被阴了,其他地方也要配置。1.my.c…

2026/7/23 22:48:35 阅读更多 →

最新新闻

CVE_2020_26259 任意文件删除

CVE_2020_26259 任意文件删除

CVE-2020-26259 任意文件删除漏洞深度剖析 漏洞概述CVE-2020-26259 是一个影响 xstream 库(Java 中用于序列化 XML 数据的流行库)的严重安全漏洞。该漏洞允许攻击者通过构造恶意的 XML 输入,实现任意文件删除。xstream 在 1.4.14 版本之前存…

2026/7/23 23:29:04 阅读更多 →
请假流程:六款.NET工作流引擎实现方式对比

请假流程:六款.NET工作流引擎实现方式对比

请假请流程:六款.NET工作流引擎实现方式对比对象:Elsa Workflows、Workflow Core、WorkflowEngine.NET、CCFlow、StepWise、Slickflow 对照需求:一份「人人可发起」的简单请假审批(含天数分支、表单附件、反馈申请人) …

2026/7/23 23:28:04 阅读更多 →
【从0开发一个 Agent】第十章:Prompt Engineering 工程化

【从0开发一个 Agent】第十章:Prompt Engineering 工程化

在前面的章节中,我们已经为 AI Agent 赋予了工具调用、长期记忆和 RAG 知识库等强大能力。但你是否发现,随着功能模块的堆叠,System Prompt 变得越来越臃肿,Agent 的行为也开始变得不稳定?有时它会忘记 RAG 的约束&…

2026/7/23 23:28:04 阅读更多 →
2026年7月20日-7月26日(gis视频教程第一季+ue独立游戏)

2026年7月20日-7月26日(gis视频教程第一季+ue独立游戏)

根据百日计划, 7月20日–7月26日,gis视频教程第一季1.16-1.20,,uec和ue肉鸽蓝图每天各一节,并改造蓝图为c 即, 周一:gis视频教程第一季1.16,uec基础p21,ue肉鸽蓝图p21,并…

2026/7/23 23:27:03 阅读更多 →
机械故障诊断中的四维几何融合技术解析

机械故障诊断中的四维几何融合技术解析

1. 项目概述:当机械故障诊断遇上四维几何融合在工业设备监测领域,机械故障诊断一直是个既关键又棘手的难题。传统方法往往受限于单一特征提取维度,就像只用一把尺子测量复杂的三维物体。我们这次要探讨的方法,则像给工程师配备了一…

2026/7/23 23:27:03 阅读更多 →
元初混沌 6G 全域通感一体化体系架构 第一卷 第五十三篇 太赫兹链路五行损耗动态补偿

元初混沌 6G 全域通感一体化体系架构 第一卷 第五十三篇 太赫兹链路五行损耗动态补偿

第五十三篇 太赫兹链路五行损耗动态补偿承启前置说明第五十二篇完成 RIS 智能超表面五行调衡架构建模,构建了「五行内生自衡 RIS 外场主动调衡」双层稳态调控体系,实现场域波束、信号、组网、杂波、资源五大维度失衡的主动纠偏与裕度拓展。前述篇章的调…

2026/7/23 23:27:03 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻