当前位置: 首页 > news >正文

UVa 544 Heavy Cargo

题目描述

题目要求在一个无向图中,找到从起点到终点的路径,使得路径上的最小边权最大(即最大化最小承载重量)。输出这个最大承载重量。

输入格式

每个测试用例第一行包含两个整数nnn2≤n≤2002 \le n \le 2002n200)和rrr1≤r≤199001 \le r \le 199001r19900)。接下来rrr行,每行两个城市名和一个整数权值(道路承载量)。最后一行两个城市名,表示起点和终点。输入以0 0结束。

输出格式

对于每个测试用例,输出Scenario #x,然后输出最大承载重量,后跟tons,最后输出一个空行。

样例

输入

4 3 Karlsruhe Stuttgart 100 Stuttgart Ulm 80 Ulm Muenchen 120 Karlsruhe Muenchen 5 5 Karlsruhe Stuttgart 100 Stuttgart Ulm 80 Ulm Muenchen 120 Karlsruhe Hamburg 220 Hamburg Muenchen 170 Muenchen Karlsruhe 0 0

输出

Scenario #1 80 tons Scenario #2 170 tons

题目分析

本题的核心是求解“最大瓶颈路径”,即最大化路径上的最小边权。可以使用类似Floyd-Warshall\texttt{Floyd-Warshall}Floyd-Warshall的变体或最大生成树(Maximum Spanning Tree\texttt{Maximum Spanning Tree}Maximum Spanning Tree)求解。

算法

  • 初始时,weight[i][j]\textit{weight}[i][j]weight[i][j]表示iiijjj的直接边权,若没有边则为000
  • 对于每个中间点kkk,更新:
    weight[i][j]=max⁡(weight[i][j],min⁡(weight[i][k],weight[k][j])) \textit{weight}[i][j] = \max(\textit{weight}[i][j], \min(\textit{weight}[i][k], \textit{weight}[k][j]))weight[i][j]=max(weight[i][j],min(weight[i][k],weight[k][j]))
  • 最终weight[start][end]\textit{weight}[start][end]weight[start][end]即为答案。

复杂度分析

n≤200n \le 200n200Floyd-Warshall\texttt{Floyd-Warshall}Floyd-WarshallO(n3)=8×106O(n^3) = 8 \times 10^6O(n3)=8×106,可接受。

代码实现

// Heavy Cargo// UVa ID: 544// Verdict: Accepted// Submission Date: 2016-08-10// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);intn,r,weight[201][201],cases=0;while(cin>>n>>r,n&&r){map<string,int>cities;string start,end;inttons,count=1;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)weight[i][j]=weight[j][i]=-1;for(inti=1;i<=r;i++){cin>>start>>end>>tons;if(cities.find(start)==cities.end())cities[start]=count++;if(cities.find(end)==cities.end())cities[end]=count++;if(tons>weight[cities[start]][cities[end]]){weight[cities[start]][cities[end]]=tons;weight[cities[end]][cities[start]]=tons;}}for(intk=1;k<=n;k++)for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)if(weight[i][k]!=-1&&weight[k][j]!=-1)weight[i][j]=max(weight[i][j],min(weight[i][k],weight[k][j]));cin>>start>>end;cout<<"Scenario #"<<++cases<<'\n';cout<<weight[cities[start]][cities[end]]<<" tons\n\n";}return0;}
http://www.jsqmd.com/news/1052752/

相关文章:

  • 嵌入式GUI输入系统实战:emWin PID驱动框架解析与触摸屏、鼠标、摇杆集成指南
  • 免费解锁专业虚拟化:VMware Workstation Pro 17许可证密钥完整指南
  • 2026年比较好的光伏风电大电流柔性母线电缆/数据中心大电流柔性母线电缆/大电流浇筑柔性母线电缆用户口碑推荐厂家 - 行业平台推荐
  • 如何在5分钟内完成Steam成就管理:终极Steam Achievement Manager完整教程
  • 2026汕尾漏水检测维修本地口碑防水商家榜单:厨卫/阳台/屋面/地下室渗漏水维修,持证施工+明码实价,防水补漏公司TOP5推荐 - 即刻修防水
  • Gemini 3.5 Flash轻量情感交互系统实战指南
  • Java AES加密实战:从原理到生产环境避坑指南
  • Gemini 3.1 Pro自定义指令实战指南:从重复教AI到构建数字分身
  • Ubuntu VPS单节点Cassandra部署与调优实战指南
  • 嵌入式GUI开发:emWin指针输入设备驱动开发与校准实战
  • Python通达信数据接口终极指南:三步构建你的免费A股分析系统
  • 10分钟训练AI歌手:检索式语音转换完整指南
  • Visual C++运行库修复工具:5分钟快速修复Windows软件启动错误的完整方案
  • Elsevier投稿状态追踪终极指南:三步告别手动刷新焦虑
  • 基于六自由度模型的 UUV 三维运动仿真体系理论分析研究(Matlab代码实现)
  • 终极指南:如何使用暗黑破坏神2存档编辑器打造完美角色
  • ICS05PW调试命令与S19格式实战:8位MCU嵌入式开发深度指南
  • 本地部署大语言模型三步落地:LM Studio+Ollama+Dify工程实践
  • TWR-56F8200开发板硬件配置与软件调试全攻略
  • 使用OpenSSL批量解密HLS TS视频片段:原理与自动化脚本实战
  • League Akari:3个思维转变,让英雄联盟游戏效率翻倍的秘密
  • 3分钟解锁你的网易云音乐:ncmdumpGUI免费ncm转换终极指南
  • 终极免费方案:3分钟解锁Microsoft 365完整功能完整指南
  • 五艘无人艇分布式协同围捕编队控制仿真系统理论分析(Matlab代码实现)
  • Gemini Pro会员开通实操指南:环境预检、激活验证与API调用优化
  • 嵌入式GUI字体转换:从TTF到C数组的实战指南
  • 让经典游戏手柄重获新生:XOutput协议转换工具的终极指南
  • 嵌入式GUI控件开发:消息机制与ROTARY、SCROLLBAR、SLIDER实战解析
  • OpenClaw+Ollama全离线AI助理:2026年本地大模型安全部署实战指南
  • Claude 3.5 Sonnet 国内稳定接入实战指南:VS Code、CLI 与混合模型工作流