送礼物

来源:互联网 发布:风电 知乎 编辑:程序博客网 时间:2024/05/16 01:02
题目详情:

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算法

0 0