#include <bits/stdc++.h>
#define ll long long
#define db long double
#define pll pair<ll,ll>
#define foru(i,a,b) for(int i=(a);i<=(ll)(b);i++)
#define ford(i,a,b) for(int i=(a);i>=(ll)(b);i--)
#define ALL(a) (a).begin(),(a).end()
#define ROUND(i) fixed<<setprecision(i)
#define fi first
#define se second
using namespace std;
const ll MAXN=3e5+55;
const ll LOG=18;
const ll INF=1e18;
ll n,Q;
vector<pll>adj[MAXN];
ll dep[MAXN],st[MAXN],fn[MAXN],tdfs=0;
ll up[MAXN][LOG+5],mnw[MAXN][LOG+5];
void dfsprep(ll u,ll p){
    st[u]=++tdfs;
    for(auto [v,w]:adj[u])if(v!=p){
        dep[v]=dep[u]+1;
        up[v][0]=u;
        mnw[v][0]=w;
        foru(i,1,LOG){
            up[v][i]=up[up[v][i-1]][i-1];
            mnw[v][i]=min(mnw[v][i-1],mnw[up[v][i-1]][i-1]);
        }
        dfsprep(v,u);
    }
    fn[u]=tdfs;
}
pll lift(ll u,ll k){
    ll w=1e18;
    ford(i,LOG,0)if(k>>i&1)w=min(w,mnw[u][i]),u=up[u][i];
    return {u,w};
}
ll LCA(ll u,ll v){
    if(dep[u]>dep[v])swap(u,v);
    v=lift(v,dep[v]-dep[u]).fi;
    if(u==v)return u;
    ford(i,LOG,0)if(up[u][i]!=up[v][i])u=up[u][i],v=up[v][i];
    return up[u][0];
}
bool inside(ll p,ll u){
    return st[p]<=st[u]&&fn[u]<=fn[p];
}
vector<ll>ke[MAXN],ver;
ll dp[MAXN],k;
void makeTree(){
    sort(ALL(ver),[&](ll &u,ll &v){return st[u]<st[v];});
    ll hehe=ver.size()-1;
    foru(i,1,hehe){
        ver.push_back(LCA(ver[i-1],ver[i]));
    }
    sort(ALL(ver),[&](ll &u,ll &v){return st[u]<st[v];});
    ver.erase(unique(ALL(ver)),ver.end());
    stack<ll>st;st.push(ver[0]);
    hehe=ver.size()-1;
    foru(i,1,hehe){
        while(st.size()&&!inside(st.top(),ver[i]))st.pop();
        ke[st.top()].push_back(ver[i]);
        st.push(ver[i]);
    }
}
void DFS(ll u,ll p){
    ll sum=0;
    for(auto v:ke[u]){
        DFS(v,u);
        sum+=dp[v];
    }
    if(dp[u]<1e17){
        dp[u]=min(dp[u],lift(u,dep[u]-dep[p]).se);
    }
    else{
        dp[u]=min(sum,lift(u,dep[u]-dep[p]).se);
    }
}
void solveQuery(){
    cin>>k;ver={};
    foru(i,1,k){
        ll u;cin>>u;
        ver.push_back(u);
        dp[u]=mnw[u][0];
    }
    makeTree();
    DFS(ver[0],1);
    cout<<dp[ver[0]]<<'\n';
    for(auto u:ver)ke[u]={},dp[u]=1e18;
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  
    cin>>n;
    foru(i,1,n-1){
        ll u,v,w;cin>>u>>v>>w;
        adj[u].push_back({v,w});
        adj[v].push_back({u,w});
    }

    memset(mnw,0x3f,sizeof(mnw));
    memset(dp,0x3f,sizeof(dp));
    dfsprep(1,0);

    cin>>Q;
    while(Q--){
        solveQuery();
    }
    return 0;
}