#include "bits/stdc++.h" using namespace std; inline int scan(){ int x = 0; char c = getchar_unlocked(); while(c < '0' || c > '9'){ c = getchar_unlocked(); } while(c >= '0' && c <= '9'){ x = (x << 3) + (x << 1) + c - '0'; c = getchar_unlocked(); } return x; } const int N = 1e5 + 5; const int LN = 20; int n , t; int a , b , c; int k; long long ans; static vector < pair < int , int > > v[N]; static int dist[N]; static int depth[N]; static int dp[LN][N << 1]; static int arr[N]; static int mark[N]; static int logtable[N << 1]; static int euler[N << 1]; static int start[N]; int timer; inline void pre(){ logtable[1] = 0; for(int i = 2 ; i <= timer ; ++i){ logtable[i] = logtable[i >> 1] + 1; } for(int i = 1 ; i <= timer ; ++i){ dp[0][i] = euler[i]; } for(int i = 1 ; i < LN ; ++i){ for(int j = 1 ; j + (1 << i) - 1 <= timer ; ++j){ int x = depth[dp[i - 1][j]]; int y = depth[dp[i - 1][j + (1 << (i - 1))]]; dp[i][j] = (x <= y) ? dp[i - 1][j] : dp[i - 1][j + (1 << (i - 1))]; } } } void dfs1(int node , int parent){ euler[++timer] = node; start[node] = timer; for(auto it : v[node]){ if(it.first != parent){ dist[it.first] = dist[node] + it.second; depth[it.first] = depth[node] + 1; dfs1(it.first , node); euler[++timer] = node; } } } inline int rmq(int l , int r) { int k = logtable[r - l + 1]; return depth[dp[k][l]] <= depth[dp[k][r - (1 << k) + 1]] ? dp[k][l] : dp[k][r - (1 << k) + 1]; } inline int lca(int a, int b) { return rmq(min(start[a] , start[b]), max(start[a] , start[b])); } long long solve(){ for(int i = n ; i >= 1 ; --i){ for(auto it : v[i]){ if(it.first > i){ ans += 1LL * mark[it.first] * (k - mark[it.first]) * it.second; mark[i] += mark[it.first]; } } } return ans; } void out(){ if(ans < 10){ putchar_unlocked('0' + ans); return; } int temp = ans % 10; ans /= 10; out(); putchar_unlocked('0' + temp); } int main(){ timer = 0; n = scan() , t = scan(); for(int i = 1 ; i < n ; ++i){ a = scan() , b = scan() , c = scan(); v[a].emplace_back(make_pair(b , c)); v[b].emplace_back(make_pair(a , c)); } dist[1] = 0; depth[1] = 0; dfs1(1 , 0); pre(); for(int ii = 1 ; ii <= t ; ++ii){ k = scan(); ans = 0; for(int i = 1 ; i <= k ; ++i){ arr[i] = scan(); } if(k <= 320){ for(int i = 1 ; i <= k ; ++i){ for(int j = 1 ; j < i ; ++j){ ans += dist[arr[i]] + dist[arr[j]] - (dist[lca(arr[i] , arr[j])] << 1); } } } else{ memset(mark , 0 , sizeof(mark)); for(int i = 1 ; i <= k ; ++i){ ++mark[arr[i]]; } ans = solve(); } out(); putchar_unlocked('\n'); } }