首页/新闻资讯/正文详情

UVa 771 Flying Stars

发布时间:2026/11/3 18:55:55 来源:云帆数科 栏目:资讯中心
UVa 771 Flying Stars
题目描述给定若干机场以及每日循环的航班信息。每个机场有固定的时区偏移和登机 / 转机耗时。从起点机场的某个本地时刻出发需要经过一系列航班抵达终点机场。要求计算从出发时刻到抵达终点时刻的总旅行时间以天、小时、分钟表示并输出抵达终点时的本地时间以及最优路径上各航班的标识符。输入格式每个测试用例由多行组成。第一行包含起点机场标识符、终点机场标识符和出发本地时间格式hh:mm。第二行是一个整数NNN2≤N≤1002 \le N \le 1002≤N≤100表示机场总数。接下来NNN个机场的描述每个描述以标题行开始机场标识符、时区格式shh:mm或-、登机耗时格式hh:mm和一个整数MMMM≤300M \le 300M≤300表示该机场的航班数。随后MMM行每行描述一个航班航班标识符、目的地机场标识符、起飞本地时间格式hh:mm和飞行时长格式hh:mm。多个测试用例之间由空行分隔。输出格式对于每个测试用例第一行输出总旅行时间格式d:hh:mm其中ddd为完整天数不超过999。第二行输出抵达终点时的当地时间格式hh:mm。随后每行输出最优路径上的一个航班标识符顺序与乘坐顺序一致。相邻测试用例的输出之间用空行分隔。样例输入Pulkovo JFK 11:15 3 Pulkovo 03:00 01:30 2 BA347 Heathrow 12:10 04:25 Z8805 Heathrow 18:25 04:30 Heathrow 00:00 00:45 3 BA160 JFK 09:20 08:10 BA346 Pulkovo 14:45 04:20 Z8804 Pulkovo 21:30 04:25 JFK -05:00 00:45 1 BA161 Heathrow 14:25 08:05输出1:09:15 12:30 Z8805 BA160题目分析本题要求从起点机场到终点机场的最快路径其中速度由航班飞行时长决定但路径选择受限于每日循环的航班时刻表以及各机场的转机等待时间。同时机场分布在不同的时区所有时间均为当地时间因此需要统一到某个绝对时间轴上进行计算。若以到达某个机场的绝对时刻作为状态则在每个机场可以选择后续航班其中航班能否乘坐取决于当地时间的起飞时刻是否晚于当前时刻加上该机场的登机耗时即最早可登机时刻。由于航班每日循环若当天合适航班已过则需要等待到次日同一时刻。问题的难点在于时间的本地与绝对转换以及时区差的处理。航班时刻的循环性质使得等待时间需要模144014401440分钟计算。节点数最多100100100每个机场最多300300300个航班总边数3×1043 \times 10^43×104可以使用最短路径算法。解题思路时间模型设起点机场为SSS其时区偏移为ΔS\Delta_SΔS​分钟。将起点出发的本地时间t0t_0t0​分钟范围0∼14390 \sim 14390∼1439作为绝对时间000的基准。对于任意机场AAA其在绝对时间TTT分钟对应的当地时间为localA(T)(t0T(ΔA−ΔS)) mod 1440 \textit{local}_A(T) (t_0 T (\Delta_A - \Delta_S)) \bmod 1440localA​(T)(t0​T(ΔA​−ΔS​))mod1440其中结果规范到[0,1439][0, 1439][0,1439]。反之若已知某机场的当地时间为LLL则对应的绝对时间TTT需满足T≡L−t0−(ΔA−ΔS)(mod1440)T \equiv L - t_0 - (\Delta_A - \Delta_S) \pmod{1440}T≡L−t0​−(ΔA​−ΔS​)(mod1440)。状态表示与转移用dist[u]表示到达机场uuu的最早绝对时间从起点出发时刻算起。初始dist[S] 0。当从机场uuu出发时必须等待boarding[u]分钟才能登机因此可登机的最早绝对时刻为ready dist[u] boarding[u]。计算ready时刻uuu的当地时间为L(t0ready(Δu−ΔS)) mod 1440 L (t_0 ready (\Delta_u - \Delta_S)) \bmod 1440L(t0​ready(Δu​−ΔS​))mod1440对于uuu的每个航班fff起飞当地时间dep飞行时长dur需找到最早的一次起飞可能当天或之后数天满足该次起飞当地时间为dep且不早于L。等待时间wait (dep - L) mod 1440结果非负则起飞绝对时刻depAbs ready wait到达目的地vvv的绝对时刻为depAbs dur。如果该值小于dist[v]则更新。注意由于飞行时长正数且等待时间非负图中边权非负可使用 Dijkstra 算法。节点最多100100100个边数最多约3×1043 \times 10^43×104优先队列Moore-Dijkstra\texttt{Moore-Dijkstra}Moore-Dijkstra效率足够。路径回溯在更新dist[v]时同时记录前驱节点prevNode[v]以及所使用的航班标识符prevFlight[v]。当Moore-Dijkstra\texttt{Moore-Dijkstra}Moore-Dijkstra结束从终点逆向回溯即可得到完整航班序列再反转输出。复杂度分析设机场数为NNN≤100\le 100≤100每个机场航班数最多MMM≤300\le 300≤300总边数E≤3×104E \le 3\times 10^4E≤3×104。Moore-Dijkstra\texttt{Moore-Dijkstra}Moore-Dijkstra使用优先队列每次松弛操作O(log⁡N)O(\log N)O(logN)总复杂度O(Elog⁡N)O(E \log N)O(ElogN)远小于可接受范围。代码实现// Flying Stars// UVa ID: 771// Verdict: Accepted// Submission Date: 2026-07-08// UVa Run Time: 0.020s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 解析 hh:mm 为分钟数intparseTime(conststrings){inthstoi(s.substr(0,2));intmstoi(s.substr(3,2));returnh*60m;}// 解析时区 hh:mm 或 -hh:mm 为分钟偏移intparseTimezone(conststrings){intsign(s[0])?1:-1;inthstoi(s.substr(1,2));intmstoi(s.substr(4,2));returnsign*(h*60m);}// 将分钟数格式化为 hh:mm0~1439stringformatTime(intt){t%1440;if(t0)t1440;charbuf[6];sprintf(buf,%02d:%02d,t/60,t%60);returnstring(buf);}// 将总分钟数格式化为 d:hh:mmstringformatDuration(inttotal){intdaystotal/1440;intremtotal%1440;charbuf[20];sprintf(buf,%d:%02d:%02d,days,rem/60,rem%60);returnstring(buf);}structFlight{string id;string dest;intdep;// 本地起飞时间分钟 (0~1439)intdur;// 飞行时长分钟};structAirport{string id;intoffset;// 时区偏移分钟intboarding;// 登机/转机耗时分钟vectorFlightflights;};intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);string srcId,dstId,startStr;boolfirstCasetrue;while(cinsrcIddstIdstartStr){if(!firstCase)cout\n;firstCasefalse;intN;cinN;unordered_mapstring,intidx;vectorAirportairports(N);for(inti0;iN;i){string id,tz,boardStr;intM;cinidtzboardStrM;idx[id]i;airports[i].idid;airports[i].offsetparseTimezone(tz);airports[i].boardingparseTime(boardStr);airports[i].flights.resize(M);for(intj0;jM;j){string fid,dest,depStr,durStr;cinfiddestdepStrdurStr;airports[i].flights[j].idfid;airports[i].flights[j].destdest;airports[i].flights[j].depparseTime(depStr);airports[i].flights[j].durparseTime(durStr);}}intsrcidx[srcId];intdstidx[dstId];intstartLocalparseTime(startStr);intoffsetSrcairports[src].offset;constintINF1e9;vectorintdist(N,INF);vectorintprevNode(N,-1);vectorstringprevFlight(N,);priority_queuepairint,int,vectorpairint,int,greaterpairint,intpq;dist[src]0;pq.push({0,src});while(!pq.empty()){auto[curDist,u]pq.top();pq.pop();if(curDist!dist[u])continue;if(udst)break;intreadycurDistairports[u].boarding;// 可登机绝对时间// 计算 ready 时刻该机场的本地时间intlocalReady(startLocalready(airports[u].offset-offsetSrc))%1440;if(localReady0)localReady1440;for(constFlightf:airports[u].flights){intwait(f.dep-localReady)%1440;if(wait0)wait1440;intdepAbsreadywait;intarrAbsdepAbsf.dur;intvidx[f.dest];if(arrAbsdist[v]){dist[v]arrAbs;prevNode[v]u;prevFlight[v]f.id;pq.push({arrAbs,v});}}}// 输出总旅行时间coutformatDuration(dist[dst])\n;// 输出到达目的地当地时间intarrivalLocal(startLocaldist[dst](airports[dst].offset-offsetSrc))%1440;if(arrivalLocal0)arrivalLocal1440;coutformatTime(arrivalLocal)\n;// 回溯路径vectorstringroute;intcurdst;while(cur!src){route.push_back(prevFlight[cur]);curprevNode[cur];}reverse(route.begin(),route.end());for(conststringfid:route)coutfid\n;}return0;}总结本题将时区、航班周期和转机等待时间整合到一个绝对时间轴上通过Moore-Dijkstra\texttt{Moore-Dijkstra}Moore-Dijkstra算法求解最短路径。关键点在于将本地时间与绝对时间相互转换以及正确处理航班时刻的循环等待。该解法能够处理最多100100100个机场、300300300个航班的数据规模时间复杂度O(Elog⁡N)O(E \log N)O(ElogN)空间复杂度O(NE)O(N E)O(NE)满足题目要求。在实际实现中注意所有时间运算以分钟为单位避免浮点误差并严格处理模运算的负数情况。

相关推荐

政务文稿场景中,AI辅助工具能做什么、不能做什么
政务文稿场景中,AI辅助工具能做什么、不能做什么

组织人事和政务文稿工作有几个共同点:材料多、标准严、容错低、重复性工作占比高。AI辅助工具确实可以分担一部分工作,但它更适合做初筛、初稿和整理,不适合直接替代最终审核。一、文档校对:适合做规则检查,不适合做最… · 2026/11/3 18:55:55

UVa 773 The JustaPox Language
UVa 773 The JustaPox Language

题目描述 JustaPox\texttt{JustaPox}JustaPox 语言只处理整数数组,声明数组有两种方式: 显式指定大小:A is [1] 表示 A 是长度为 111 的数组,其值可以是任意一个长度为 111 的整数序列。通过包含已声明的数组:C is A B… · 2026/11/3 18:55:55

Github Copilot 智能编程辅助效果实测
Github Copilot 智能编程辅助效果实测

在日常开发中,我们常常花费大量时间在重复性的代码编写上:从定义基础的数据结构,到为每个函数撰写繁琐的单元测试,再到面对一段陈旧的遗留代码时不知从何下手进行重构。这些机械劳动不仅消耗了开发者的精力,也拖慢了整… · 2026/11/3 18:54:43

边缘计算在IoT测试中的架构设计与优化实践
边缘计算在IoT测试中的架构设计与优化实践

1. 边缘计算与IoT测试的现状与挑战物联网设备的爆炸式增长正在重塑测试领域的面貌。根据行业数据,2023年全球活跃IoT设备数量已突破160亿台,预计到2025年将超过270亿台。这种规模的增长使得传统集中式测试方法面临严峻挑战:测试数据回传造成的… · 2026/11/3 19:42:28

传感器技术参数解析与选型指南
传感器技术参数解析与选型指南

1. 传感器技术参数的重要性 在工业自动化、智能家居、环境监测等众多领域,传感器就像人体的感觉器官一样,负责采集各种物理量信息。但面对市场上琳琅满目的传感器产品,如何选择适合自己项目的型号?技术参数表就是我们的"选购… · 2026/11/3 19:42:28

边缘计算在物联网分布式测试框架中的应用与实践
边缘计算在物联网分布式测试框架中的应用与实践

1. 项目背景与核心挑战在物联网设备爆发式增长的今天,传统集中式测试方案正面临三大瓶颈:海量终端接入导致的云端压力、跨地域部署带来的延迟问题、以及异构设备兼容性测试的复杂性。去年参与某智慧园区项目时,我们曾遇到单日10万台设备并发上… · 2026/11/3 19:42:28

云原生入门三支柱:容器、声明式、微服务实战指南
云原生入门三支柱:容器、声明式、微服务实战指南

简介:本资源是一份系统化、分层级的云原生技术学习路线图PDF,面向开发者、运维工程师及希望转型云原生领域的IT从业者,帮助其建立从入门到高阶的完整知识体系与演进路径。文件共1个,为1.29MB的高清PDF文档,内容涵盖初阶… · 2026/11/3 19:42:28

Kafka安装配置与性能优化实战指南
Kafka安装配置与性能优化实战指南

1. Kafka安装前的环境准备在开始安装Kafka之前,我们需要确保系统环境满足基本要求。我最近在一台CentOS 7服务器上部署Kafka集群时,发现环境配置不当会导致各种奇怪的问题。以下是经过实战验证的环境检查清单:1.1 Java环境配置Kafka是基于Jav… · 2026/11/3 19:42:28

Ubuntu FreeRADIUS EAP-TLS 双向认证配置与排错
Ubuntu FreeRADIUS EAP-TLS 双向认证配置与排错

简介:面向在 Ubuntu 上搭建 802.1X EAP-TLS 双向认证测试环境的网络实验人员与运维学习者,这份文档围绕 FreeRADIUS 的部署、证书生成与终端接入验证展开,适合需要复现企业级无线认证流程的初中级读者。压缩包共 1 个 docx 文件,约… · 2026/11/3 19:41:27

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码