#include<bits/stdc++.h> #define maxn 100111 #define logN 20 using namespace std; vector < pair< int,int > > adj[maxn]; int f[maxn][logN], depth[maxn], n,t; vector<int> arr(100002); void dfs(int u) { for (int i = 1; i < logN; i++) f[u][i] = f[f[u][i - 1]][i - 1]; for (int i = 0; i < (int) adj[u].size(); i++) { int v = adj[u][i].first; if (!depth[v]) { f[v][0] = u; depth[v] = depth[u] + adj[u][i].second; dfs(v); } } } int lca (int u, int v) { if (depth[u] < depth[v]) swap(u, v); for (int i = logN - 1; i >= 0; i--) if (depth[f[u][i]] >= depth[v]) { u = f[u][i]; } if (u == v) return u; for (int i = logN - 1; i >= 0; i--) if (f[u][i] != f[v][i]) { u = f[u][i]; v = f[v][i]; } return f[u][0]; } int dist (int u, int v) { int x = lca(u, v); int res = depth[u] + depth[v] - 2 * depth[x]; return res; } int main() { cin >> n; cin>>t; for (int i = 1; i < n; i++) { int u, v,w; cin >> u; cin>> v; cin>> w; pair<int,int> p1(v,w); pair<int,int> p2(u,w); adj[u].push_back(p1); adj[v].push_back(p2); } //memset(f,) depth[1] = 1; dfs(1); while(t--) { int k; cin>>k; for(int i=0;i<k;i++) cin>>arr[i]; long long sum=0; for(int i=0;i<k-1;i++) { for(int j=i+1;j<k;j++) sum+=(long long)dist(arr[i],arr[j]); } cout<<sum<<endl; } return 0; }