HeHe和XiXi在一个地方玩游戏,XiXi把N-1件礼物(HeHe以前送给XiXi的)分别藏在了另外N-1个地方,这些地方都能互相到达,且所有的边都是有方向的。
现在HeHe要做的事就是去那些地方找回那N-1件礼物给XiXi;
由于每一件礼物都有特殊的意义,所以XiXi要求HeHe每找到一件礼物,就必须马上返回XiXi所在的位置,对她说一句当年送她这件礼物的时候所说的话。
由于每走一个单位长度HeHe需要花费1分钟,XiXi还要求HeHe在最快的时间内把这些礼物带回来交给她,你能帮助HeHe么?
输入
测试数据有T组,每组测试数据开始为两个整数N和M,1 <= N,M <= 100000。
N代表所有的位置,M代表这些位置之间的长度
然后是M行,每行有三个数,u,v,w,即位置u和位置v之间有一条单向的边,距离为w;
你可以假设位置的编号是从1到N,XiXi的位置始终都在1;
输出
对于每组测试数据, 用一行输出HeHe所花费的最短时间。
提醒:问题一定有解。w的范围是100以内的整数。第一个T表示有多少组数据,比如T为2,就表示有两组输入数据。
答题说明:
输入样例
1
3 3
1 2 4
2 3 5
3 1 6
输出样例
30
题目分析:
要求HeHe找到一个礼物n后,必须回到XiXi的位置,即HeHe从1到n,然后从n到回到1,而且路径1->n->1必须是上面给的有向边。
那么HeHe找到一个礼物n所花的时间是time[1][n]+time[n][1]。
time[1][n]表示从1到n花费的时间
那么结果就是
int result = 0;
for(int i=2;i<=N;++i){
result += time[1][i]+time[i][1];
}
所以问题可归结为求N个顶点中任意两点间的距离,因为是有向边,考虑使用Floyd算法
本文介绍了一道关于寻找并返回礼物的最短路径问题,需要在特定条件下找到所有礼物并返回起点,通过Floyd算法解决任意两点间的最短路径问题。
494

被折叠的 条评论
为什么被折叠?



