HDU - 2586
#include<bits/stdc++.h>
using namespace std;
#define maxn 40005
vector <pair<int,int > >mmp[maxn];
#define inf 0x3f3f3f3f
int dis[maxn];
bool vis[maxn];
int n,m;
void spfa(int start)
{
queue<int>que;
for(int i=1; i<=n; i++)
dis[i]=inf;
dis[start]=0;
vis[start]=1;
que.push(start);
while(!que.empty())
{
int top=que.front();
que.pop();
for(int i=0; i<mmp[top].size(); i++)
{
int temp=mmp[top][i].first;
if(dis[temp]>dis[top]+mmp[top][i].second&&!vis[temp])
{
dis[temp]=dis[top]+mmp[top][i].second;
que.push(temp);
vis[temp]=1;
}
}
}
}
int main()
{
int t,u,v,w;
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=1; i<n; i++)
{
cin>>u>>v>>w;
mmp[u].push_back(make_pair(v,w));
mmp[v].push_back(make_pair(u,w));
}
while(m--)
{
memset(vis,0,sizeof(vis));
cin>>u>>v;
spfa(u);
cout<<dis[v]<<endl;
}
for(int i=1; i<=n; i++)
mmp[i].clear();
}
return 0;
}