#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <cstdio>

using namespace std;

#define MAXN 300005

int Set[MAXN], Size[MAXN], Node[MAXN];
vector<pair<int, int>> G[MAXN];
vector<int> G2[MAXN];

int64_t Sol[MAXN];

int Dist[MAXN];

int nodes;

int Leg(int a, int b, int d) {
    int parent = ++nodes;
    if(a>=0) G2[parent].push_back(a);
    if(b>=0) G2[parent].push_back(b);
    Dist[parent] = d;

    return parent;
}

void dfs(int node, int dist) {
    Node[node] = -1;

    for(auto e : G[node]) {
        if(!Node[e.first]) {
            dfs(e.first, dist + e.second);
            Node[node] = Leg(Node[node], Node[e.first], dist);
        }
    }

    if(Node[node] == -1) {
        Node[node] = ++nodes;
        Dist[nodes] = dist;
    }
}

unordered_map<int, int> Count[MAXN], Queries[MAXN];
int Union(int s1, int s2, int dist) {
    if(Count[s1].size() > Count[s2].size())
        swap(s1, s2);

    for(auto &x : Count[s1]) {
        int q = x.first;

        int a = x.second;
        int b = Count[s2][q];

        Sol[q] += dist * (1LL*a*a + 1LL*b*b - 1LL*(a+b)*(a+b));

        Count[s2][q] = a + b;
    }

    return s2;
}

int main() {

    int n, t, a, b, c;
    cin>>n>>t;

    for(int i=1; i<n; i++) {
        cin>>a>>b>>c;
        G[a].push_back({b, c});
        G[b].push_back({a, c});
    }

    dfs(1, 0);

    for(int i=1; i<=t; i++) {
        cin>>Size[i];
        for(int k=1; k<=Size[i]; k++) {
            cin>>a;
            Queries[Node[a]][i]++;
        }
    }

    for(int i=1; i<=nodes; i++) {

        if(G2[i].size() == 0) {
            Set[i] = i;
        } else if(G2[i].size() == 1) {
            Set[i] = Set[G2[i][0]];
        } else {
            Set[i] = Union(Set[G2[i][0]], Set[G2[i][1]], Dist[i]);
        }

        for(auto q : Queries[i]) {
            Sol[q.first] += 1LL * Dist[i] * q.second * (Size[q.first] - q.second);
            Sol[q.first] -= 2LL * Dist[i] * q.second * Count[Set[i]][q.first];
            Count[Set[i]][q.first] += q.second;
        }
    }


    for(int i=1; i<=t; i++) {
        cout<<Sol[i]<<'\n';
    }

    return 0;
}