在遥远的未来,人类文明已经步入深空时代。广袤的宇宙中散布着数不尽的星系,而连接这些星系的,是由一个古老文明遗留下来的神秘“虫洞网络”(Wormhole Networks)。每个独立的虫洞网络都连接着一系列的星系。要进入任何一个虫洞网络,飞船都需要消耗特定的能量来激活跃迁引擎。一旦进入某个网络,飞船便可以在该网络所覆盖的所有星系之间进行无消耗的瞬时跳跃。 作为一名星际领航员,您的任务是规划一条从起点星系到目标星系的最优航线。 整个已知宇宙可以被看作一个图,其中的节点是星系,编号从 0 到 500 。总共有 M 个独立的虫洞网络。 虫洞网络 i :这是一个由 n_i 个星系组成的集合,记作 W_i = s_i,1, s_i,2, ..., s_i,n_i 。 跃迁成本 C_i :要使用虫洞网络 i 进行旅行,必须首先支付 C_i 的能量。支付后,您可以在 W_i 集合内的任意两个星系之间自由、无限次地移动,无需额外花费。 您的飞船初始位于星系 S_start ,目标是抵达星系 S_dest ,并且飞船的总备用能量为 E_total 。您需要计算出从 S_start 到 S_dest 所需的最小总能量消耗。一次旅行可能需要穿越多个虫洞网络,当您从一个网络 W_i 前往另一个网络 W_j 时,您必须先通过一个共同的“中转星系” s_transfer (即 s_transfer ∈ W_i W_j ),然后支付网络 W_j 的跃迁成本 C_j 。 如果无法抵达目标星系,或者最低能量消耗超出了您的总备用能量 E_total ,则视为任务失败。
第一行包含四个整数: M, S_start, S_dest, E_total 。 M :虫洞网络的总数量。( 1 ≤ M ≤ 50 ) S_start :起始星系的编号。( 0 ≤ S_start ≤ 500 ) S_dest :目标星系的编号。( 0 ≤ S_dest ≤ 500 , S_start ≠ S_dest ) E_total :飞船的总备用能量。( 1 ≤ E_total ≤ 500 ) 接下来的 M 行,每行描述一个虫洞网络,格式如下: C_i n_i s_i,1 s_i,2 ... s_i,n_i C_i :进入该网络的跃迁成本。( 1 ≤ C_i ≤ 10 ) n_i :该网络连接的星系数量。( 1 ≤ n_i ≤ 10 ) s_i,j :该网络中的星系编号。( 0 ≤ s_i,j ≤ 500 )
输出一个整数,代表从 S_start 到 S_dest 的最小能量消耗。 如果无法抵达或能量不足,则输出 -1 。
1 45 103 383 1 9 45 103 182 198 244 306 416 460 490
1
4 14 19 99 8 5 11 13 22 24 44 1 1 18 3 1 22 6 7 2 12 14 17 30 36 39
-1
考点:图
数据规模 M ≤ 50 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:图
本题切入点
把每个虫洞网络视作一个「集团」,集团内任意两星系距离为 0:建图(星系 ↔ 集团)后做以「已付成本」为边权的最短路(Dijkstra/0-1 BFS),代价超 E_total 或不可达输出 −1。
把关系抽象成点与边,再按问的类型选遍历/最短路/连通性算法。
思路框架(图 通法 · 非本题专属)
实现要点:注意是有向图还是无向图,无向图加边记得双向。
复杂度:时间 O(V+E) 遍历 / O(E log V) Dijkstra | 空间 O(V+E)
该范式的通法易错点
对照本题
样例 1
1 45 103 383 / 1 9 45 103 182 198 244 306 416 460 4901样例 2
4 14 19 99 / 8 5 11 13 22 24 44 / 1 1 18 / 3 1 22 / 6 7 2 12 14 17 30 36 39-1解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2025年秋招-华为-9月24号开发岗。