#include <algorithm> #include <cstdio> #include <cstring> #include <queue> #include <vector> #define FOR(i,a,b) for(i=a; i<=b; i++) #define FOR2(i,n) FOR(i,0,n-1) #define TFOR(i,a,b) for(i=a; i>=b; i--) #define f first #define s second #define all(x) x.begin(),x.end() #define MAXN 100005 #define MAXM 200005 #define KOKN 500 using namespace std; typedef pair < int , long long > pii; int read(){ int res(0),sign(1); char c; while(1){ c = getchar(); if('0' <= c && c <= '9') { res = c - '0'; break; } else if(c == '-') { sign = -1; break; } } while(1){ c = getchar(); if('0' <= c && c <= '9') res = res*10 + c - '0'; else break; } return res * sign; } vector < pii > G[MAXN]; long long sum; long long H[MAXN] , T[MAXN] , T2[MAXN] , dist[MAXN]; int M,N,Q,S; int A[MAXN] , B[MAXN] , Log2[MAXM] , parent[MAXN]; int C[MAXN] , D[MAXN] , K[1000005]; int table[MAXM][18]; void init_dfs( int x , int pre ) { parent[x] = pre; vector < pii > :: iterator it; for( it = G[x].begin(); it != G[x].end(); ++it ) if( it->f != pre ) { dist[it->f] = dist[x] + it->s; init_dfs( it->f , x ); } } void numerate() { queue < int > Q; vector < pii > :: iterator it; Q.push(1); int s(0),x; while( !Q.empty() ) { x = Q.front(); Q.pop(); A[x] = ++s; B[s] = x; for( it = G[x].begin(); it != G[x].end(); ++it ) if( it->f != parent[x] ) Q.push(it->f); } } void dfs_lca( int x , int pre ) { vector < pii > :: iterator it; table[++M][0] = A[x]; if( !C[ A[x] ] ) C[ A[x] ] = M; for( it = G[x].begin(); it != G[x].end(); ++it ) if( it->f != pre ) { dfs_lca( it->f , x ); table[++M][0] = A[x]; if( !C[ A[x] ] ) C[ A[x] ] = M; } } int find_lca( int a , int b ) { a = D[a]; b = D[b]; if( a > b ) swap(a,b); int t = Log2[b-a+1]; return B[ min( table[a][t] , table[b-(1<<t)+1][t] ) ]; } void dfs1( int x , int pre ) { vector < pii > :: iterator it; for( it = G[x].begin(); it != G[x].end(); ++it ) if( it->f != pre ) { dfs1( it->f , x ); T[x] += T[it->f] + it->s * T2[it->f]; T2[x] += T2[it->f]; } T2[x] += H[x]; } void dfs2( int x , int pre , long long t ) { sum += H[x] * ( t + T[x] ); vector < pii > :: iterator it; for( it = G[x].begin(); it != G[x].end(); ++it ) if( it->f != pre ) dfs2( it->f , x , t + it->s * ( S - T2[it->f] ) + T[x] - ( T[it->f] + it->s * T2[it->f] ) ); } int main() { int a,b,c,i,j; N = read(); Q = read(); FOR(i,1,N-1) { a = read(); b = read(); c = read(); G[a].push_back( make_pair( b,c ) ); G[b].push_back( make_pair( a,c ) ); } init_dfs(1,-1); numerate(); dfs_lca(1,-1); FOR(j,1,17) FOR(i,1,M) table[i][j] = min( table[i][j-1] , ( i + (1<<(j-1)) <= M ) ? table[ i + (1<<(j-1)) ][j-1] : 1000000 ); a = 0; FOR(i,1,M) Log2[i] = ( i == ( 1 << a ) ) ? a++ : Log2[i-1]; FOR(i,1,N) D[i] = C[ A[i] ]; FOR(i,1,Q) { S = read(); FOR(j,1,S) H[ K[j] = read() ]++; sum = 0; if( S <= KOKN ) FOR(a,1,S) FOR(b,a+1,S) { sum += dist[ K[a] ] + dist[ K[b] ] - 2 * dist[ find_lca( K[a] , K[b] ) ]; } else { dfs1(1,-1); dfs2(1,-1,0); sum /= 2; FOR(j,1,N) T[j] = T2[j] = 0; } FOR(j,1,S) H[ K[j] ] = 0; printf("%lld\n" , sum ); } return 0; }