#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; typedef vector<int> vi; typedef vector<ii> vii; typedef long long ll; int n,t,a,b,c,k; ll ans; vii adj[100100]; vii lf; int par[100100]; int mpar[100100]; int lev[100100]; int res[100100]; void dfs(int d, int l){ lev[d] = l; for (int i=0; i<adj[d].size(); i++){ int u = adj[d][i].first; if (lev[u] < 0){ par[u] = d; mpar[u] = adj[d][i].second; dfs(u,l+1); } } lf.push_back(ii(-l,d)); } int main(){ scanf("%d%d",&n,&t); for (int i=1; i<n; i++){ scanf("%d%d%d",&a,&b,&c); a--; b--; adj[a].push_back(ii(b,c)); adj[b].push_back(ii(a,c)); } memset(par,-1,sizeof par); memset(lev,-1,sizeof lev); dfs(0,0); sort(lf.begin(),lf.end()); for (int i=0; i<t; i++){ scanf("%d",&k); memset(res,0,sizeof res); for (int j=0; j<k; j++){ scanf("%d",&a); a--; res[a]++; } ans = 0; for (int j=0; j<n; j++){ int i = lf[j].second; if (par[i] >= 0){ ans += ((ll)res[i]*(ll)mpar[i]*(ll)(k-res[i])); res[par[i]] += res[i]; } } printf("%lld\n",ans); } return 0; }