#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;
}