#include <iostream> #include <algorithm>using namespace Std;const int M=40010;int dis[m],data[4*m],ext[4*m ],head[m],value[4*m],ans[205],pa[m];int len,l,vis[m],da[900],ne[900],he[m],id[900];int Find (int x) {return x==pa[x] ? X:find (Pa[x]);} void Add (int a,int b,int k) {value[len]=k;data[len]=b;ext[len]=head[a];head[a]=len++;} void ad (int a,int b,int k) {id[l]=k;da[l]=b;ne[l]=he[a];he[a]=l++;} void Tarjan (int u,int fa) {vis[u]=1;int v;pa[u]=u;for (int t=head[u];t!=-1;t=ext[t]) {v=data[t];if (V!=FA) {Dis[v]=dis[u ]+value[t];tarjan (V,u);}} for (int t=he[u];t!=-1;t=ne[t]) {v=da[t];if (Vis[v]) Ans[id[t]]=find (v);} PA[U]=FA;} void Init () {Len=l=0;memset (head,-1,sizeof head), memset (ext,-1,sizeof ext); memset (ne,-1,sizeof ne); memset (He,-1, sizeof he); Memset (vis,0,sizeof vis);} int main () {int t;int n,m;int x,y,z;int a[205],b[205];scanf ("%d", &t), while (t--) {init (); scanf ("%d%d",&n,& m); for (int i=1;i<n;i++) {scanf ("%d%d%d", &x,&y,&z); Add (x, y, z); add (y,x,z);} for (int i=1;i<=m;i++) {scanf ("%D%d ", &a[i],&b[i]); ad (a[i],b[i],i); ad (b[i],a[i],i);} Dis[1]=0;tarjan (1,0);//puts ("SDFWSD"); for (int i=1;i<=m;i++) printf ("%d\n", Dis[a[i]]+dis[b[i]]-2*dis[ans[i]]) ;//printf ("%d\n", Ans[i]);}} /*97 51 2 31 3 22 4 82 5 53 6 63 7 44 57 34 62 65 711 61 2 41 3 51 4 42 10 610 11 23 5 75 6 14 7 37 8 87 9 91 611 95 47 82 118 9*/
How far away?