【洛谷题解/AcWing题解】USACO2.4 洛谷P1522 牛的旅行
本文很长但是讲的很通俗了。题目链接洛谷链接https://www.luogu.com.cn/problem/P1522AcWing链接https://www.acwing.com/problem/content/1127/涉及知识1.图论与建图2.多源汇最短路和Floyed算法思路分析注意本题洛谷翻译和AcWing翻译有所不同洛谷要求新牧场直径最小值AcWing要求所有牧场最大直径的最小值。本文先按洛谷的翻译写最后再讲求AcWing要求的结果该如何做。第一部分厘清概念首先本题给出了很多概念我们先来逐一解析牧区一个点牧场很多个牧区组成一个牧场也就是点的连通块距离两点间的最短距离本题的距离是欧几里得距离这就是为什么本题底层逻辑上还是需要用最短路算法的原因直径牧场中最远的两个牧区的距离第二部分建图与预处理在正式求解之前我们需要思考如何建图。本题我们可以根据给定的领接矩阵若领接矩阵中G [ i ] [ j ] G[i][j]G[i][j]的值为 1那么就根据给定坐标求点i ii到j jj的距离 如果值为 0 则按照 Floyed 算法的规则赋值为 0 或正无穷。由于本题其后都需要使用“距离”我们先跑一遍 Floyed 算法求出数组d i s [ i ] [ j ] dis[i][j]dis[i][j]记录任意两点间的最短路即本题的距离。然后我们进一步思考新牧场的直径可能是怎样构成的我们连接的两点i ii和j jj是未连通的两点也就是说在连接时i ii和j jj应当分属两个不同的连通块A AA和B BB那么新牧场直径就有可能有三种情况情况一连通块A AA的直径即经过A AA内某一点的最远距离可能不经过点i ii情况二连通块B BB的直径即经过B BB内某一点的最远距离可能不经过点j jj情况三经过点i ii的最远距离 经过点j jj的最远距离 点i ii和 点j jj之间的路径长度注意到这三种情况都与从某一点出发的最远距离息息相关所以我们在跑完 Floyed 后用一个数组m a x d maxdmaxd来记录每一点的最远路径。第三部分结果的求解对于洛谷的翻译如果是要求解新牧场的直径的最小值我们只需要保证连接两点i ii和j jj时m a x d [ i ] m a x d [ j ] maxd[i]maxd[j]maxd[i]maxd[j]i ii和j jj的距离之和最小即可因为原有牧场的直径已经是固定的这个跨牧场的直径即上文的情况三是要大于等于所有原牧场的直径的最大值的否则无法构成直径。这也是本题最绕的地方。举个例子比如情况一的直径是 33情况二的直径是 44情况三我们求出最小是 44.5那么情况一和二无法构成直径而情况三我们已经求的是最小值也就求出了直径的最小值。而如果情况一的直径是 33情况二的直径是 44情况三求出来是 40那情况三就不可能成为直径直径的最小值为44。如果我们故意“施魔法”让情况三的数超过 33 和 44则又不满足对最小值的要求了。开个玩笑但就是这么个道理综上我们可以发现我们只需要保证先求情况三的最小值就一定可以在三者中找到直径的最小值。因此最后我们只需要分别把三种情况的直径求出来再取最大值就一定是直径的最小值了。对于 AcWing 的翻译求的是所有牧场的直径的最小值唯一的区别在于处理洛谷的翻译的题目我们是分了两种情况再连通块A AA和B BB中求直径因为必须是新生成的牧场。没有这条限制后我们则不需要在代码中特判当前点是否属于两个连通块直接求所有点的最远距离m a x d [ i ] maxd[i]maxd[i]再与m a x d [ i ] m a x d [ j ] maxd[i]maxd[j]maxd[i]maxd[j]i ii和j jj的距离之和取最大值即可。与网上其他做法相比本做法最大的优点在于不需要使用并查集等数据结构思路更为精练代码更为简洁可迁移性也很强。笔者水平有限若有错误和不足敬请指出AC代码洛谷版#includeiostream#includecstdio#includecmathusingnamespacestd;constintN200;constdoubleINF1e20;typedefpairdouble,doublePII;intn;doubledis[N][N],maxd[N];charG[N][N];PII farm[N];doubleget_dist(PII x,PII y){doubledxx.first-y.first,dyx.second-y.second;returnsqrt(dx*dxdy*dy);}voidfloyed(){for(intk1;kn;k){for(inti1;in;i){for(intj1;jn;j){dis[i][j]min(dis[i][j],dis[i][k]dis[k][j]);}}}return;}intmain(){cinn;for(inti1;in;i)cinfarm[i].firstfarm[i].second;for(inti1;in;i){for(intj1;jn;j)cinG[i][j];}for(inti1;in;i){for(intj1;jn;j){if(G[i][j]1)dis[i][j]get_dist(farm[i],farm[j]);elsedis[i][j]ij?0:INF;}}floyed();for(inti1;in;i){for(intj1;jn;j){if(dis[i][j]INF)maxd[i]max(maxd[i],dis[i][j]);}}//两点连成的最大直径的最小值doubleres1INF;inta0,b0;for(inti1;in;i){for(intj1;jn;j){if(dis[i][j]INF){if(res1maxd[i]get_dist(farm[i],farm[j])maxd[j]){res1maxd[i]get_dist(farm[i],farm[j])maxd[j];ai,bj;}}}}//在连通块A中doubleres20.0;for(inti1;in;i){//判断点i和点a是否连通如果连通则说明在同一连通块中//但是这里取的是maxd[i]所以不一定会经过点aif(dis[i][a]INF)res2max(res2,maxd[i]);}//在连通块B中doubleres30.0;for(inti1;in;i){//同上if(dis[i][b]INF)res3max(res3,maxd[i]);}printf(%.6lf,max(res1,max(res2,res3)));// cout endl res1 res2 res3;return0;}AcWing版将情况一和二合并直接求出所有点的m a x d [ i ] maxd[i]maxd[i]的最大值#includeiostream#includecstdio#includecmathusingnamespacestd;constintN200;constdoubleINF1e20;typedefpairdouble,doublePII;intn;doubledis[N][N],maxd[N];charG[N][N];PII farm[N];doubleget_dist(PII x,PII y){doubledxx.first-y.first,dyx.second-y.second;returnsqrt(dx*dxdy*dy);}voidfloyed(){for(intk1;kn;k){for(inti1;in;i){for(intj1;jn;j){dis[i][j]min(dis[i][j],dis[i][k]dis[k][j]);}}}return;}intmain(){cinn;for(inti1;in;i)cinfarm[i].firstfarm[i].second;for(inti1;in;i){for(intj1;jn;j)cinG[i][j];}for(inti1;in;i){for(intj1;jn;j){if(G[i][j]1)dis[i][j]get_dist(farm[i],farm[j]);elsedis[i][j]ij?0:INF;}}floyed();for(inti1;in;i){for(intj1;jn;j){if(dis[i][j]INF)maxd[i]max(maxd[i],dis[i][j]);}}//两点连成的最大直径的最小值doubleres1INF;inta0,b0;for(inti1;in;i){for(intj1;jn;j){if(dis[i][j]INF){if(res1maxd[i]get_dist(farm[i],farm[j])maxd[j]){res1maxd[i]get_dist(farm[i],farm[j])maxd[j];ai,bj;}}}}doubleres20.0;for(inti1;in;i){res2max(res2,maxd[i]);}printf(%.6lf,max(res1,res2));// cout endl res1 res2 res3;return0;}

相关新闻

游戏开发中的缓动函数应用与LayaAir实践

游戏开发中的缓动函数应用与LayaAir实践

1. 缓动函数在游戏开发中的核心价值在游戏开发中,动画效果直接影响用户体验的品质感。想象一下,当角色从一个位置移动到另一个位置时,如果只是机械地直线匀速运动,会显得非常生硬不自然。而通过缓动函数,我们可以实现加…

2026/8/4 19:35:37 阅读更多 →
Unity游戏模组加载器MelonLoader从零到精通:安装、配置与排错全指南

Unity游戏模组加载器MelonLoader从零到精通:安装、配置与排错全指南

1. 项目概述:为什么你需要掌握MelonLoader? 如果你是一个Unity游戏的深度玩家,尤其是那些支持模组(Mod)的PC游戏,那么你一定对“模组加载器”这个词不陌生。它就像一把万能钥匙,打开了游戏官方内…

2026/8/4 19:35:33 阅读更多 →
利用AI助手高效规划Monorepo大型功能:从架构设计到代码生成

利用AI助手高效规划Monorepo大型功能:从架构设计到代码生成

如果你正在管理一个包含多个微服务、前端应用、共享库和工具脚本的复杂项目,那么最近一定被这些问题困扰过:为什么每次修改一个共享库,都要手动更新十几个依赖它的服务?为什么新同事要花一整天才能把整个开发环境跑起来&#xff1…

2026/8/4 20:44:55 阅读更多 →

最新新闻

Stent高级功能:Action Handler与异步状态管理

Stent高级功能:Action Handler与异步状态管理

Stent高级功能:Action Handler与异步状态管理 【免费下载链接】stent Stent is combining the ideas of redux with the concept of state machines 项目地址: https://gitcode.com/gh_mirrors/st/stent Stent是一个结合了Redux思想与状态机概念的JavaScript…

2026/8/4 22:05:52 阅读更多 →
研究生新生必读:入学适应与学业规划核心指南

研究生新生必读:入学适应与学业规划核心指南

很多2026届新生刚入学或刚转博,就被开题报告这四个字整得心力交瘁。最崩溃的不是写不出来,而是你辛辛苦苦熬夜半个月翻出来的创新点,导师看一眼就冷冷地抛回一句:这个方向十年前就有人做透了,前沿性在哪?或…

2026/8/4 22:05:52 阅读更多 →
Presspack核心功能解析:Webpack如何优化WordPress主题开发流程

Presspack核心功能解析:Webpack如何优化WordPress主题开发流程

Presspack核心功能解析:Webpack如何优化WordPress主题开发流程 【免费下载链接】presspack 💻 Wordpress like its 2022 with Webpack and Docker 项目地址: https://gitcode.com/gh_mirrors/pr/presspack Presspack是一个将现代前端开发工具与Wo…

2026/8/4 22:05:52 阅读更多 →
Firepwd安全最佳实践:合法使用密码解密工具的注意事项

Firepwd安全最佳实践:合法使用密码解密工具的注意事项

Firepwd安全最佳实践:合法使用密码解密工具的注意事项 【免费下载链接】firepwd firepwd.py, an open source tool to decrypt Mozilla protected passwords 项目地址: https://gitcode.com/gh_mirrors/fi/firepwd Firepwd是一款开源的Mozilla密码解密工具&a…

2026/8/4 22:05:52 阅读更多 →
Unity无限滚动列表终极指南:如何用LoopScrollRect实现高性能UI渲染

Unity无限滚动列表终极指南:如何用LoopScrollRect实现高性能UI渲染

Unity无限滚动列表终极指南:如何用LoopScrollRect实现高性能UI渲染 【免费下载链接】LoopScrollRect These scripts will make your UGUI ScrollRect reusing cells, to improve performance, loading time and draw calls. 项目地址: https://gitcode.com/gh_mir…

2026/8/4 22:05:52 阅读更多 →
西安二手交易系统开发实战:从需求分析到部署部署全流程指南

西安二手交易系统开发实战:从需求分析到部署部署全流程指南

西安二手交易系统开发实战:从需求分析到部署全流程指南 在西安,二手交易市场潜力巨大,从闲置数码、二手家具到考研资料流转,需求旺盛。但传统的闲鱼、转转等平台缺乏本地化服务支撑——比如西安用户希望“当面交易”“同城闪送”“…

2026/8/4 22:04:52 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →