here
模板题。
// god with me
//#pragma GCC optimize(1)
//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
//#include <bits/stdc++.h>
//#include <bits/stdc++.h>
#include <cmath>
#include <math.h>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#define inf 0x7fffffff
#define ll long long
//#define int long long
//#define double long double
//#define double long long
#define re int
//#define i int i
//#define void inline void
#define eps 1e-8
//#define mod 1e9+7
#define ls(p) p<<1
#define rs(p) p<<1|1
#define pi acos(-1.0)
#define pb push_back
#define mk make_pair
#define P pair < int , int >
// typedef long long s64;
using namespace std;
const int mod=1e6+7;
const int N=5e4+5;//?????????? 4e8
const int M=1e5+10;
int ver[M],next1[M],edge[M],head[N];
int fa[N],d[N],v[N],lca[N],ans[N];
vector<int> query[N],query_id[N];
bool vis[N];
int T,n,m,tot,t;
void add1(int x,int y,int z)
{
ver[++tot]=y;edge[tot]=z;next1[tot]=head[x];head[x]=tot;
}
void add_query(int x,int y,int id)
{
query[x].pb(y),query_id[x].pb(id);
query[y].pb(x),query_id[y].pb(id);
}
int get(int x)
{
if(x==fa[x]) return x;
return fa[x]=get(fa[x]);
}
void tarjan(int x)
{
v[x]=1;
for(int i=head[x];i;i=next1[i])
{
int y=ver[i];
if(v[y]) continue;
d[y]=d[x]+edge[i];
tarjan(y);
fa[y]=x;
}
for(int i=0;i<query[x].size();i++)
{
int y=query[x][i],id=query_id[x][i];
if(v[y]==2)
{
int lca=get(y);
// ans[id]=get(y);
ans[id]=min(ans[id],d[x]+d[y]-2*d[lca]);
}
}
v[x]=2;
}
void solve()
{
cin>>n>>m;
for(int i=0;i<=n;i++)
{
vis[i]=false;
d[i]=inf;
head[i]=v[i]=0;fa[i]=i;
query[i].clear(),query_id[i].clear();
}
tot=0;
for(int i=1;i<n;i++)
{
int x,y,z;
cin>>x>>y>>z;
add1(x,y,z);
add1(y,x,z);
vis[y]=1;
}
// cin>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
if(x==y) ans[i]=0;
else
{
add_query(x,y,i);
// add_query(y,x,i);
ans[i]=1<<30;
}
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
// cout<<i<<endl;
d[i]=0;
tarjan(i);
break;
}
}
// tarjan(1);
for(int i=1;i<=m;i++) cout<<ans[i]<<endl;
}
signed main()
{
// ios::sync_with_stdio(false);
int T=1;
cin>>T;
for(int index=1;index<=T;index++)
{
// printf("Case %d:\n",index);
solve();
// puts("");
}
return 0;
}