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

UVa 383 Shipping Routes

题目描述

Slow Boat to China\texttt{Slow Boat to China}Slow Boat to China航运公司需要一个程序来帮助快速向潜在客户报价。运费取决于货物的大小和所需的运输段数。一个运输段连接两个仓库,但并非所有仓库之间都有直接连接,因此从一个仓库到另一个仓库可能需要多个运输段。

每个数据集包含111303030个仓库。每个仓库由两个大写字母标识。运输段是双向的,存在于任意两个不同的仓库之间。

运费 = 货物大小 × 所需运输段数 ×100100100

对于给定的运输请求(货物大小、始发仓库、目的仓库),程序输出最佳(最便宜)的运费,如果无法运输则输出相应信息。

输入格式

第一行包含整数TTT1≤T≤101 \leq T \leq 101T10),表示数据集中数据集的个数。

每个数据集的第一行包含三个整数:

  • MMM1≤M≤301 \leq M \leq 301M30):仓库数量
  • NNN0≤N≤M(M−1)/20 \leq N \leq M(M-1)/20NM(M1)/2):运输段数量
  • PPP0≤P≤100 \leq P \leq 100P10):运输请求数量

第二行包含MMM个两个字母的仓库代码(大写字母),以空格分隔。

接下来NNN行,每行包含两个仓库代码,表示它们之间有直接运输段。

接下来PPP行,每行包含一个整数(货物大小)和两个仓库代码(始发地和目的地)。

输出格式

第一行输出SHIPPING ROUTES OUTPUT。对于每个数据集,输出DATA SET X标题,然后PPP行结果($costNO SHIPMENT POSSIBLE)。最后一行输出END OF OUTPUT

样例输入

2 6 7 5 AA CC QR FF DD AB AA CC CC QR DD CC AA DD AA AB DD QR AB DD 5 AA AB 14 DD CC 1 CC DD 2 AA FF 13 AB QR 3 0 1 AA BB CC 5 AA CC

样例输出

SHIPPING ROUTES OUTPUT DATA SET 1 $500 $1400 $100 NO SHIPMENT POSSIBLE $2600 DATA SET 2 NO SHIPMENT POSSIBLE END OF OUTPUT

题目分析

问题的本质

这是一个图论最短路径问题。每个仓库是节点,运输段是边(权重为111)。需要回答多个查询:给定起点和终点,求最短路径长度(运输段数),然后计算运费。

算法选择

  • 节点数M≤30M \leq 30M30,可以使用Floyd-Warshall\texttt{Floyd-Warshall}Floyd-Warshall算法计算所有点对之间的最短路径
  • 时间复杂度O(M3)=27000O(M^3) = 27000O(M3)=27000,完全可行
  • 或对每个查询使用BFS\texttt{BFS}BFS,但P≤10P \leq 10P10MMM很小,两种方法均可

无连接处理

如果两点之间不可达,距离为无穷大,输出NO SHIPMENT POSSIBLE

运费计算

运费 = 货物大小 × 最短路径长度 ×100100100


参考代码

// Shippint Routes// UVa ID: 383// Verdict: Accepted// Submission Date: 2016-06-28// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;constintMAX_LEGS=100000;// 无穷大intmain(intargc,char*argv[]){intdatasets=0,cases=0;cin>>datasets;cout<<"SHIPPING ROUTES OUTPUT"<<endl<<endl;while(datasets--){intM,N,P;cin>>M>>N>>P;// 仓库代码到索引的映射map<string,int>warehouses;for(inti=1;i<=M;i++){string codes;cin>>codes;warehouses[codes]=i;}// 初始化距离矩阵intlegs[M+1][M+1];for(inti=1;i<=M;i++){for(intj=1;j<=M;j++)legs[i][j]=MAX_LEGS;legs[i][i]=0;}// 读取边(运输段)for(inti=1;i<=N;i++){string start,next;cin>>start>>next;legs[warehouses[start]][warehouses[next]]=1;legs[warehouses[next]][warehouses[start]]=1;}// Floyd-Warshall 计算所有点对最短路径for(intk=1;k<=M;k++)for(inti=1;i<=M;i++)for(intj=1;j<=M;j++)if(legs[i][k]+legs[k][j]<legs[i][j])legs[i][j]=legs[i][k]+legs[k][j];cout<<"DATA SET "<<++cases<<endl<<endl;// 处理查询for(inti=1;i<=P;i++){intsize;string start,next;cin>>size>>start>>next;intdist=legs[warehouses[start]][warehouses[next]];if(dist>=MAX_LEGS){cout<<"NO SHIPMENT POSSIBLE"<<endl;continue;}cout<<"$"<<size*dist*100<<endl;}cout<<endl;}cout<<"END OF OUTPUT"<<endl;return0;}
http://www.rkmt.cn/news/1462638.html

相关文章:

  • 破解窗户漏水反复修漏难题:‘测定施保’四阶根治法如何实现长效不漏? - 资讯纵览
  • 计算机毕业设计之基于大数据的中医药传承平台的构建
  • UltraStar Deluxe:从零开始打造你的开源卡拉OK娱乐中心
  • 开源IT资产管理系统Snipe-IT:如何三步解决企业资产管理难题
  • 什么是穿越机?从“空中F1”到沉浸式飞行的终极体验
  • 2026多联机口碑榜:选购必看的六大核心维度 - 资讯纵览
  • 空铁复合网络的复杂性及联运网络设计方案【附代码】
  • 最新发布!清远夏令营哪家靠谱? - 13724980961
  • 2026前端必备:手把手教你打造AI Agent,引领全栈开发新潮流!
  • Xournal++:为什么这款免费开源手写笔记软件是你的数字笔记革命终极选择?
  • 【通信】基带QAM通信系统Matlab仿真
  • ControlNet-v1.1 FP16模型集:当AI绘画遇到效率革命
  • Agent“活”起来!企业级动态RAG的可靠记忆与知识进化之路
  • nf-core流程本地化实战:从AWS-iGenomes到自定义参考基因组的配置避坑指南
  • 2026 年 6 月消防设施操作员免费题库实测:告别无效刷题 - 讲清楚了
  • Qt Quick Canvas 画布实战:手把手教你用QML打造一个可复用的汽车仪表盘组件
  • QNAP多云盘挂载工具完整指南:一站式云存储管理中心终极方案
  • 2026 年 6 月消防设施操作员题库高效备考攻略:5 款工具实测 - 讲清楚了
  • 别只盯着PSNR!我扒了MIMO-UNet和DeepRFT的代码,发现傅里叶残差块替换的‘隐藏关卡’
  • 苏州成人学历红黑榜|热门机构盘点 - 学历提升信息早知道
  • 告别无效提交!用VisualSVN Server 3.9.1的Pre-commit Hook,给团队日志审核上个硬核保险
  • Lua学习笔记:库函数
  • HR总监紧急通知:下季度起所有请假系统必须通过ISO/IEC 23894 AI治理认证,你准备好了吗?
  • 2026年常州合同纠纷律师避坑指南:5位专业可靠律师推荐 - 本地品牌推荐
  • 无人机组装线多机型共线落地实测 柔性生产可行性科普
  • AI搜索优化如何赋能杭州企业?杭州爱搜索深度解析GEO实战路径 - 品牌报告
  • CentOS服务器运维笔记:为Tesla K80等老显卡配置稳定的CUDA深度学习环境
  • 论智慧的本质属性与伪智慧批判——基于先验绝对真理标准的哲学清算
  • 什么是大模型?
  • SuperPNG终极指南:如何用免费插件彻底优化Photoshop PNG导出