小慕每天早上都会收到一份推送,上面列出了当天需要送达的客户地址以及推荐的路线信息。 小慕自己又额外查找了一些客户之间的路线距离数据。请你根据这些信息,帮小慕规划一条最短的送货路线,使得他全程行驶的总距离最短。 注意: 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