#include <bits/stdc++.h> using namespace std; #define dbgs(x) cerr << (#x) << " --> " << (x) << ' ' #define dbg(x) cerr << (#x) << " --> " << (x) << endl #define foreach(i,x) for(type(x)i=x.begin();i!=x.end();i++) #define FOR(ii,aa,bb) for(int ii=aa;ii<=bb;ii++) #define ROF(ii,aa,bb) for(int ii=aa;ii>=bb;ii--) #define type(x) __typeof(x.begin()) #define orta (bas + son >> 1) #define sag (k + k + 1) #define sol (k + k) #define pb push_back #define mp make_pair #define nd second #define st first #define endl '\n' typedef pair < int ,int > pii; typedef long long ll; const long long linf = 1e18+5; const int mod = (int) 1e9 + 7; const int logN = 18; const int inf = 1e9; const int N = 2e5+5; int n, m, x, y, ccc[N], h[N], s; ll sum[N], z, ans[N], dist[N]; vector< int > t, t2, t3, g[N]; vector< pii > v[N]; int prep(int node, int root) { ccc[node] = 1; foreach(it, v[node]) if(it->st != root && !h[it->st]) ccc[node] += prep(it->st, node); return ccc[node]; } int find(int node, int root, int S) { foreach(it, v[node]) if(it->st != root && !h[it->st] && ccc[it->st] > S) return find(it->st, node, S); return node; } void dfs(int node, int root, int dist) { ::dist[node] = dist; t.pb(node); t2.pb(node); foreach(it, v[node]) if(it->st != root && !h[it->st]) dfs(it->st, node, dist + it->nd); } void solve(int node) { prep(node, 0); node = find(node, 0, ccc[node] / 2); h[node] = 1; t2.clear(); t2.pb(node); dist[node] = 0; foreach(it, v[node]) if(!h[it->st]) { t.clear(); t3.clear(); dfs(it->st, node, it->nd); foreach(it, t) foreach(it2, g[*it]) { sum[*it2]++; t3.pb(*it2); } foreach(it, t) foreach(it2, g[*it]) { ans[*it2] -= sum[*it2] * dist[*it]; t3.pb(*it2); } foreach(it, t3) sum[*it] = 0; } t3.clear(); foreach(it, t2) foreach(it2, g[*it]) { sum[*it2]++; t3.pb(*it2); } foreach(it, t2) foreach(it2, g[*it]) { ans[*it2] += sum[*it2] * dist[*it]; } foreach(it, t3) sum[*it] = 0; foreach(it, v[node]) if(!h[it->st]) solve(it->st); } int main() { scanf("%d %d",&n,&m); FOR(i, 2, n) { scanf("%d %d %d",&x,&y,&z); v[x].pb(mp(y, z)); v[y].pb(mp(x, z)); } FOR(i, 1, m) { scanf("%d",&s); FOR(j, 1, s) { scanf("%d",&x); g[x].pb(i); } } solve(1); FOR(i, 1, m) printf("%lld\n", ans[i]); return 0; }