#include <bits/stdc++.h>
using namespace std;
const int N=100010;
//#define int long long
int fi[N],ne[N<<1],b[N<<1],c[N<<1],k,u[N],v[N],fa[N],up[N],deep[N],n,m;
long long vv[N];
void add(int x,int y,int z){
// cerr<<"add"<<x<<" "<<y<<endl;
ne[++k]=fi[x]; b[fi[x]=k]=y; c[k]=z;
}
void dfs(int x){
for (int j=fi[x]; j; j=ne[j])
if (b[j]!=fa[x]){
fa[b[j]]=x;
up[b[j]]=c[j];
deep[b[j]]=deep[x]+1;
dfs(b[j]);
}
}
signed main(){
freopen("center.in","r",stdin);
freopen("center.out","w",stdout);
int t; scanf("%d",&t);
while (t--){
scanf("%d",&n); k=0;
for (int i=1; i<=n; ++i) fi[i]=0;
for (int i=1; i<n; ++i){
int x,y,z; scanf("%d%d%d",&x,&y,&z);
add(x,y,z); add(y,x,z);
}
dfs(1);
long long tans=-1e18;
scanf("%d",&m);
for (int i=1; i<=m; ++i){
scanf("%d%d%lld",&u[i],&v[i],&vv[i]);
int x=u[i],y=v[i]; long long ans=-vv[i];
for (int i=1; i<=n; ++i) b[i]=0;
if (deep[x]>deep[y]) swap(x,y);
while (deep[x]<deep[y]){
b[y]=1; ans+=up[y];
y=fa[y];
}
while (x!=y){
b[x]=1; b[y]=1; ans+=up[x]+up[y];
x=fa[x]; y=fa[y];
}
for (int j=1; j<i; ++j){
x=u[j]; y=v[j]; long long ans2=-vv[j];
if (deep[x]>deep[y]) swap(x,y);
bool fl=0;
while (deep[x]<deep[y]){
b[y]?fl=1:ans2+=up[y];
y=fa[y];
}
while (x!=y){
b[x]?fl=1:ans2+=up[x];
b[y]?fl=1:ans2+=up[y];
x=fa[x]; y=fa[y];
}
if (fl) tans=max(tans,ans+ans2);
}
}
if (tans==-1e18) puts("F"); else
printf("%lld\n",tans);
}
}