#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<bitset>
#include<math.h>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int N=250100;
const int MAX=100000000;
const int mod=100000000;
const int MOD1=1000000007;
const int MOD2=1000000009;
const double EPS=0.00000001;
typedef long long ll;
const ll MOD=998244353;
const ll INF=10000000010;
typedef double db;
typedef unsigned long long ull;
int tot,u[N],v[2*N],w[2*N],pre[2*N];
void add(int x,int y,int z) {
if (x==y) return ;
v[tot]=y;w[tot]=z;pre[tot]=u[x];u[x]=tot++;
}
int k,de[N],in[N],f[N][20],out[N],dis[N];
void dfs(int x,int y,int z) {
k++;in[x]=k;f[x][0]=y;
de[x]=de[y]+1;dis[x]=min(z,dis[y]);
for (int i=1;i<20;i++)
if (de[x]>(1<<i)) f[x][i]=f[f[x][i-1]][i-1];
for (int i=u[x];i!=-1;i=pre[i])
if (v[i]!=y) dfs(v[i],x,w[i]);
out[x]=k;
}
int h[N],d[N];
int cmd(int x,int y) {
return in[x]<in[y];
}
int check(int x,int y) {
return in[x]<=in[y]&&out[x]>=out[y];
}
ll dp[N];
int getlca(int x,int y) {
if (de[x]<de[y]) swap(x,y);
for (int i=20;i>=0;i--)
if (de[x]-(1<<i)>=de[y]) x=f[x][i];
if (x==y) return x;
for (int i=20;i>=0;i--)
if (de[x]>(1<<i)&&f[x][i]!=f[y][i]) { x=f[x][i];y=f[y][i]; }
return f[x][0];
}
void getans(int x,int y) {
dp[x]=0;
for (int i=u[x];i!=-1;i=pre[i]) {
getans(v[i],w[i]);dp[x]+=dp[v[i]];
}
if (x==1) { u[x]=-1;return ; }
if (u[x]==-1) dp[x]=1ll*y;
else dp[x]=min(1ll*y,dp[x]);
u[x]=-1;
}
void solve() {
int i,K,lca;
ll ans=0;
scanf("%d", &K);
for (i=1;i<=K;i++) scanf("%d", &h[i]);
sort(h+1,h+K+1,cmd);k=1;
for (i=2;i<=K;i++)
if (!check(h[k],h[i])) h[++k]=h[i];
K=k;k=d[1]=1;tot=0;
for (i=1;i<=K;i++) {
lca=getlca(h[i],d[k]);
while (1) {
if (de[lca]>=de[d[k-1]]) {
add(lca,d[k],dis[d[k]]);k--;
if (d[k]!=lca) d[++k]=lca;
break ;
}
add(d[k-1],d[k],dis[d[k]]);k--;
}
if (d[k]!=h[i]) d[++k]=h[i];
}
while (--k) add(d[k],d[k+1],dis[d[k+1]]);
getans(1,0);
printf("%lld\n", dp[1]);
}
int main()
{
int i,n,m,x,y,z;
scanf("%d", &n);
tot=0;memset(u,-1,sizeof(u));
for (i=1;i<n;i++) {
scanf("%d%d%d", &x, &y, &z);
add(x,y,z);add(y,x,z);
}
de[0]=k=0;dis[0]=MAX;
dfs(1,0,MAX);
scanf("%d", &m);
memset(u,-1,sizeof(u));
while (m--) solve();
return 0;
}