尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

实用指南:UVa 10228 A Star not a Tree?

实用指南:UVa 10228 A Star not a Tree?
📅 发布时间:2026/6/18 14:09:05

实用指南:UVa 10228 A Star not a Tree?

题目描述

卢克想要将他的家庭计算机网络从10mbs\texttt{10mbs}10mbs 升级到 100mbs\texttt{100mbs}100mbs。他现有的网络运用10base2\texttt{10base2}10base2(同轴)电缆,可能将任意数量的计算机以线性方式连接在一起。不幸的是,卢克无法使用现有的布线。100mbs\texttt{100mbs}100mbs 系统使用 100baseT\texttt{100baseT}100baseT(双绞线)电缆,每条电缆只能连接两个设备。

卢克选择了第二种方案:购买NNN张网卡和一个集线器(hub\texttt{hub}hub),并将他的NNN通过台计算机分别连接到集线器上。卢克能够随意布置电缆和放置集线器的位置,但计算机的位置是固定的。他想要最小化需要购买的电缆总长度。

输入格式

第一行包含测试用例的数量,后面跟着一个空行。

每个测试用例以一个正整数N≤100N \leq 100N≤100(计算机的数量)开始,后面跟着NNN行,每行给出计算机在房间内的(x,y)(x, y)(x,y)坐标(单位为mm\texttt{mm}mm)。所有坐标都是000 到 100001000010000之间的整数。

连续测试用例之间有一个空行。

输出格式

对于每个测试用例,输出一个数字,表示电缆段的总长度(四舍五入到最近的mm\texttt{mm}mm),单独占一行。

连续两个测试用例之间输出一个空行。

题目分析

问题本质

这个问题可以抽象为:在平面上给定NNN个点(计算机的位置),需要找到一个点(集线器的位置),使得该点到所有给定点的欧几里得距离之和最小。

这实际上是一个经典的费马-韦伯问题(Fermat-Weber problem\texttt{Fermat-Weber problem}Fermat-Weber problem),也称为几何中位数(geometric median\texttt{geometric median}geometric median)问题。

数学模型

给定 NNN 个点 Pi=(xi,yi)P_i = (x_i, y_i)Pi​=(xi​,yi​),我们需要找到一个点H=(hx,hy)H = (h_x, h_y)H=(hx​,hy​),使得目标函数最小化:

f(hx,hy)=∑i=1N(hx−xi)2+(hy−yi)2 f(h_x, h_y) = \sum_{i=1}^N \sqrt{(h_x - x_i)^2 + (h_y - y_i)^2}f(hx​,hy​)=i=1∑N​(hx​−xi​)2+(hy​−yi​)2​

与质心(所有点的平均值)不同,几何中位数没有封闭形式的解析解,需要使用数值方法求解。

算法选择

我们使用 韦茨菲尔德算法(Weiszfeld’s algorithm\texttt{Weiszfeld's algorithm}Weiszfeld’s algorithm)来求解几何中位数。该算法是一个迭代算法,主要思想如下:

  1. 初始化:将几何中位数的初始估计值设为所有点的质心
  2. 迭代更新:根据当前估计值,使用加权平均来更新几何中位数的位置
  3. 收敛判断:当位置变化很小时停止迭代

迭代公式为:

H(k+1)=∑i=1NPi∥H(k)−Pi∥∑i=1N1∥H(k)−Pi∥ H^{(k+1)} = \frac{\sum_{i=1}^N \frac{P_i}{\|H^{(k)} - P_i\|}}{\sum_{i=1}^N \frac{1}{\|H^{(k)} - P_i\|}}H(k+1)=∑i=1N​∥H(k)−Pi​∥1​∑i=1N​∥H(k)−Pi​∥Pi​​​

其中 ∥H(k)−Pi∥\|H^{(k)} - P_i\|∥H(k)−Pi​∥表示当前估计点H(k)H^{(k)}H(k) 到点 PiP_iPi​的欧几里得距离。

算法细节

  1. 初始值选择通过:将初始几何中位数设为所有点的质心,这样能够加速收敛
  2. 数值稳定性:当几何中位数与某个数据点重合时,分母可能为零,需要特殊处理
  3. 收敛条件:当连续两次迭代的位置变化小于某个阈值,或者达到最大迭代次数时停止
  4. 精度处理:最终结果要求四舍五入到最接近的毫米

复杂度分析

  • 每次迭代需要O(N)O(N)O(N)时间计算距离和权重
  • 通常需要 O(1)O(1)O(1) 到 O(log⁡1ϵ)O(\log \frac{1}{\epsilon})O(logϵ1​)次迭代即可收敛
  • 对于 N≤100N \leq 100N≤100的规模,算法非常高效

参考代码

// A Star not a Tree?
// UVa ID: 10228
// Verdict: Accepted
// Submission Date: 2025-10-16
// UVa Run Time: 0.000s
//
// 版权所有(C)2025,邱秋。metaphysis # yeah dot net
#include <iostream>#include <vector>#include <cmath>#include <iomanip>using namespace std;// 点结构体,表示二维坐标struct Point {double x, y;Point(double x = 0, double y = 0) : x(x), y(y) {}};// 计算两点间的欧几里得距离double distance(const Point& a, const Point& b) {return hypot(a.x - b.x, a.y - b.y);}// 使用Weiszfeld算法计算几何中位数Point geometricMedian(const vector<Point>& points, int maxIterations = 200) {int n = points.size();// 初始点设为所有点的质心(平均值)Point median;for (const auto& p : points) {median.x += p.x;median.y += p.y;}median.x /= n;median.y /= n;// Weiszfeld算法迭代for (int iter = 0; iter < maxIterations; iter++) {Point numerator(0, 0);  // 分子部分double denominator = 0; // 分母部分// 计算加权平均的分子和分母for (const auto& p : points) {double dist = distance(median, p);if (dist < 1e-12) {// 如果距离太小(接近某个数据点),跳过避免除零continue;}numerator.x += p.x / dist;numerator.y += p.y / dist;denominator += 1.0 / dist;}// 如果分母为零,说明几何中位数与某个数据点重合if (denominator == 0) {break;}// 计算新的几何中位数估计Point newMedian(numerator.x / denominator, numerator.y / denominator);// 检查是否收敛(位置变化很小)if (distance(newMedian, median) < 1e-12) {break;}// 更新几何中位数median = newMedian;}return median;}int main() {int cases;cin >> cases;bool firstCase = true;while (cases--) {int n;cin >> n;vector<Point> computers(n);for (int i = 0; i < n; i++) {cin >> computers[i].x >> computers[i].y;}// 计算几何中位数(最优集线器位置)Point hub = geometricMedian(computers);// 计算总电缆长度double totalLength = 0;for (const auto& computer : computers) {totalLength += distance(hub, computer);}// 输出结果(四舍五入到最近的整数)if (!firstCase) {cout << endl;}firstCase = false;cout << static_cast<int>(round(totalLength)) << endl;}return 0;}

总结

本题通过几何中位数的概念和韦茨菲尔德算法,有效地解决了最优集线器放置问题。关键点在于:

  1. 理解问题本质是寻找使总距离最小的点
  2. 掌握韦茨菲尔德算法的原理和实现
  3. 注意数值稳定性和收敛条件处理
  4. 正确处理输入输出格式要求

该算法对于 N≤100N \leq 100N≤100的规模非常高效,能够在合理时间内找到高质量的近似解。

相关新闻

  • 2025年市面上最佳商标注册服务商Top 5排名与深度评测
  • Solon Web 的“分身术”:单应用多端口监听,化身多重服务
  • 2025-11-12 PQ v.Next日志记录

最新新闻

  • 终极XML编辑器指南:如何用XML Notepad高效处理XML文档
  • Pearcleaner:告别macOS应用残留困扰,智能清理释放磁盘空间
  • 亨得利官方正式辟谣——关于亨得利服务渠道不实信息的严正声明与权威公示 - 亨得利官方维修中心
  • 腾讯会议同传实测避坑指南
  • Windows 10免费安装Android子系统:终极完整指南
  • 2026年广东海外独立站运营培训选型测评:十家机构实力拆解与适配指南

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号