#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> #include <map> using namespace std; const int MAXN = 100005; int N, T, K, ai, bi, ci; vector < pair <int, int> > g[MAXN]; vector <int> ki[MAXN], C[MAXN]; long long D[MAXN], res[MAXN]; map <int, int> M[MAXN]; int ID[MAXN]; void dfs(int i, int p){ for(int j = 0; j < g[i].size(); j++){ int u = g[i][j].first; if(u != p){ D[u] = D[i] + g[i][j].second; dfs(u, i); } } //cout << i << ',' << p << ' ' << D[i] << endl; } void solve(int i, int p){ for(int j = 0; j < C[i].size(); j++){ res[C[i][j]] -= 2 * D[i] * M[ID[i]][C[i][j]]; M[ID[i]][C[i][j]]++; } for(int j = 0; j < g[i].size(); j++){ int u = g[i][j].first; if(u != p){ solve(u, i); if(M[ID[u]].size() > M[ID[i]].size())swap(ID[u], ID[i]); for(map <int, int> :: iterator it = M[ID[u]].begin(); it != M[ID[u]].end(); it++){ res[it->first] -= 2 * D[i] * M[ID[i]][it->first] * (it->second); M[ID[i]][it->first] += it->second; } } } /* cout << (i + 1) << ' ' << ':'; for(map <int, int> :: iterator it = M[ID[i]].begin(); it != M[ID[i]].end(); it++){ cout << (it->first) << ',' << (it->second) << ' '; } cout << endl; */ } int main() { scanf("%d %d", &N, &T); for(int i = 0; i < (N - 1); i++){ scanf("%d %d %d", &ai, &bi, &ci); ai--, bi--; g[ai].push_back(make_pair(bi, ci)); g[bi].push_back(make_pair(ai, ci)); } dfs(0, -1); for(int i = 0; i < T; i++){ scanf("%d", &K); for(int j = 0; j < K; j++){ scanf("%d", &ai); ai--; ki[i].push_back(ai); C[ai].push_back(i); res[i] += D[ai] * (K - 1); } } for(int i = 0; i < N; i++) ID[i] = i; solve(0, -1); for(int i = 0; i < T; i++) printf("%lld\n", res[i]); return 0; }