小苯的旅行计划
题号:NC286015
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

热爱旅行的小苯生活在 B 国,B 国可以看做是一个由 n 座城市,编号从 1n,和恰好 n-1 条双向道路连接起来的连通图。

这天他要招待远道而来的 m 个朋友,帮助他们设计一个旅行计划,使得所有人的总花费最小。
具体的:每个朋友都有一个旅行计划,一共有 m 个旅行计划,其中第 j 个朋友的旅行计划是从城市 a_j 沿最短路一路旅行至城市 b_j

但每个人通过每条道路都要交一定的过路费,小苯作为朋友们的“导游”,至多可以想办法使得一条道路免费,即任何人通过它任意次都不花钱。

现在小苯希望你帮他找到那个使得其免费后就能让所有朋友的总花费最小的道路,并告诉他这个最小的总花费吧。

输入描述:

每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 1000\right) 代表数据组数,每组测试数据描述如下:
第一行输入两个正整数 n, m\ (1 \leq n \leq 10^5), (1 \leq m \leq 2 \times 10^5),分别表示 B 国的城市数量,和小苯的朋友个数。
接下来 n-1 行,每行三个正整数 u_i, v_i, w_i\ (1 \leq u_i, v_i \leq n, u \ne v, 1 \leq w \leq 10^9),表示 B 国的一条双向道路,连接 u_i, v_i 这两座城市,任何人通过一次它的花费是 w_i
接下来的 m 行,每行两个正整数 a_j, b_j\ (1 \leq a_j , b_j \leq n),分别表示每个朋友的旅行计划。
(保证同一个测试文件的所有测试数据中,n 的总和不超过 10^5m 的总和不超过 2 \times 10^5。)

输出描述:

对于每组测试数据,在单独的一行输出一个整数 cost,表示最小的总花费。
(数据保证答案不超过 2^{63}-1。)
示例1

输入

复制
1
6 3
3 1 4
1 2 1
2 4 3
2 5 4
3 6 2
1 6
3 4
1 2

输出

复制
7

说明

样例中的 B 国形态如图,最优方案是小苯选择将 1 \leftrightarrow 3 这条道路免费,三个朋友的总花费会达到最小。