#include using namespace std; typedef long long ll; #define rep(i,a,b) for(int i=(int)(a);i<(int)(b);++i) #define fore(p,c) for(auto&p:(c)) #define all(c) (c).begin(),(c).end() int N; vector> E[101010]; int Q; namespace hld{ vector g[101010]; int vid[101010],par[101010],dep[101010],sz[101010],heavy[101010],head[101010]; int n,tim; void init(int N){ n=N; tim=0; rep(i,0,n){ g[i].clear(); heavy[i]=-1; } } void add(int a,int b){ g[a].push_back(b); g[b].push_back(a); } void dfs(int cu){ sz[cu]=1; int mx=0; fore(to,g[cu]){ if(to==par[cu]) continue; par[to]=cu; dep[to]=dep[cu]+1; dfs(to); sz[cu]+=sz[to]; if(sz[to]>mx){ mx=sz[to]; heavy[cu]=to; } } } void dfs2(int cu,int h){ head[cu]=h; vid[cu]=tim++; if(heavy[cu]!=-1) dfs2(heavy[cu],h); fore(to,g[cu]) if(to!=par[cu] && to!=heavy[cu]) dfs2(to,to); } void build(){ par[0]=-1; dep[0]=0; dfs(0); dfs2(0,0); } int lca(int u,int v){ for(;head[u]!=head[v];v=par[head[v]]) if(dep[head[u]]>dep[head[v]]) swap(u,v); return dep[u]>N; hld::init(N); rep(i,0,N-1){ int a,b,c; cin>>a>>b>>c; E[a].push_back({b,c}); E[b].push_back({a,c}); hld::add(a,b); } hld::build(); dfs(0); cin>>Q; rep(q,0,Q){ int k; cin>>k; vector> v; rep(i,0,k){ int x; cin>>x; v.push_back({hld::vid[x],x}); } sort(all(v)); ll ans=0; int n=v.size(); rep(i,0,n) ans+=get(v[i].second,v[(i+1)%n].second); ans/=2; printf("%lld\n",ans); } } int main(){ _main(); }