HDU - 2586
#include<bits/stdc++.h>
using namespace std;
const int maxn=40005;
long long ans;
vector<pair<int,int > >mmp[maxn];
bool vis[maxn];
struct node
{
int x;
long long step;
} temp1,temp2;
void bfs(int xx,int yy)
{
queue<node>q;
temp1.x=xx;
temp1.step=0;
q.push(temp1);
vis[temp1.x]=1;
while(!q.empty())
{
temp1.x=q.front().x;
temp1.step=q.front().step;
q.pop();
if(temp1.x==yy)
{
ans=temp1.step;
return;
}
for(int i=0; i<mmp[temp1.x].size(); i++)
{
temp2.x=mmp[temp1.x][i].first;
temp2.step=temp1.step+mmp[temp1.x][i].second;
if(!vis[temp2.x])
{
q.push(temp2);
vis[temp2.x]=1;
}
}
}
}
int main()
{
int t,n,m;
cin>>t;
while(t--)
{
int u,v,w;
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;
bfs(u,v);
cout<<ans<<endl;
}
for(int i=1; i<=n; i++)
mmp[i].clear();
}
return 0;
}