AlgoMooc
← 返回题库

P4600. 快递员的烦恼

困难通过率 64% · 提交 118 · 通过 75
图论最短路回溯枚举最短路问题

小慕每天早上都会收到一份推送,上面列出了当天需要送达的客户地址以及推荐的路线信息。 小慕自己又额外查找了一些客户之间的路线距离数据。请你根据这些信息,帮小慕规划一条最短的送货路线,使得他全程行驶的总距离最短。 注意: 1. 不限制小慕送快递到客户手中的顺序,但必须确保每个客户的快递最终都送到。 2. 题目保证一定存在小慕从快递站到每个客户的路线距离,但不保证所有客户之间都有直接路线。小慕可以多次经过快递站和客户位置。 3. 所有快递送完后,小慕必须返回快递站。

提示:带虚线的词点一下有通俗解释。

输入描述

首行输入两个正整数 n, m 接下来 n 行,每行输入 2 个整数快递信息,格式为:客户 id 快递送到客户手中的距离 distance 再接下来 m 行,每行输入 3 个整数客户之间的距离信息,格式为:客户 id1 客户 id2 两个客户之间的距离 distance 在行末有换行符。数据保证输入均为以换行符隔开的整数。

输出描述

最短路径距离,如无法找到则输出 -1

示例

示例 1

输入

2 1
1 1000
2 1200
1 2 300

输出

2500

说明:- 路径 1:快递员先把快递送到客户 1 手中,接下来直接走客户 1 到客户 2 之间的最短线路,最后走快递站和客户 2 之间的路,回到快递站,距离为 1000 + 300 + 1200 = 2500 - 路径 2:快递员先把快递送到客户 1 手中,再返回快递站,再出发把客户 2 的快递送到手,最后返回快递站,距离为 1000 + 1000 + 1200 + 1200 = 4400 - 路径 3:快递员先把快递送到客户 2 手中,接下来直接走客户 2 到客户 1 之间的最短线路,最后走快递站和客户 1 之间的路,回到快递站,距离为 1200 + 300 + 1000 = 2500 所以最短距离为 2500

示例 2

输入

5 1
5 1000
9 1200
17 300
132 700
500 2300
5 9 400

输出

9200

说明:在所有可行的路径中,最短路径长度为 1000 + 400 + 1200 + 300 + 300 + 700 + 700 + 2300 + 2300 = 9200

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「快递员的烦恼」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。