#include <bits/stdc++.h> #define pii pair<int, int> #define mp make_pair #define pb push_back #define f first #define s second using namespace std; typedef long long ll; typedef long double ld; const int MAXN = (int) 1e6 + 7; const int INF = (int) 1e9 + 7; map<int, pair<ll, int>> cnt[MAXN]; vector<int> event[MAXN]; vector<pii> gr[MAXN]; ll res[MAXN]; void dfs(int v, int p) { for (auto it : event[v]) ++cnt[v][it].s; for (auto to : gr[v]) { if (to.f != p) { dfs(to.f, v); if (cnt[v].size() >= cnt[to.f].size()) { for (auto it : cnt[to.f]) { auto *cur = &cnt[v][it.f]; int c = it.s.s; ll sum = it.s.f + to.s * 1ll * c; res[it.f] += c * cur -> f + cur -> s * sum; cur -> s += c; cur -> f += sum; } } else { for (auto it : cnt[to.f]) { auto *cur = &cnt[v][it.f]; int c = it.s.s; ll sum = it.s.f + to.s * 1ll * c; res[it.f] += c * cur -> f + cur -> s * sum; cur -> s += c; cur -> f += sum; } } cnt[to.f].clear(); } } } int main() { #ifdef LOCAL freopen("in", "r", stdin); #endif int n, t; scanf("%d%d", &n, &t); for (int i = 1; i < n; ++i) { int x, y, c; scanf("%d%d%d", &x, &y, &c); gr[x].pb(make_pair(y, c)); gr[y].pb(make_pair(x, c)); } for (int i = 1; i <= t; ++i) { int sz; scanf("%d", &sz); while (sz --> 0) { int x; scanf("%d", &x); event[x].pb(i); } } dfs(1, 0); for (int i = 1; i <= t; ++i) printf("%lld\n", res[i]); return 0; }