#include <bits/stdc++.h> #define SZ(X) ((int)(X).size()) #define ALL(X) (X).begin(), (X).end() #define REP(I, N) for (int I = 0; I < (N); ++I) #define REPP(I, A, B) for (int I = (A); I < (B); ++I) #define RI(X) scanf("%d", &(X)) #define RII(X, Y) scanf("%d%d", &(X), &(Y)) #define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z)) #define DRI(X) int (X); scanf("%d", &X) #define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y) #define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z) #define RS(X) scanf("%s", (X)) #define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0) #define MP make_pair #define PB push_back #define MS0(X) memset((X), 0, sizeof((X))) #define MS1(X) memset((X), -1, sizeof((X))) #define LEN(X) strlen(X) #define PII pair<int,int> #define VPII vector<pair<int,int> > #define PLL pair<long long,long long> #define F first #define S second typedef long long LL; using namespace std; const int MOD = 1e9+7; const int SIZE = 1e5+10; // template end here VPII e[SIZE],emp; int N,L,R; int d[SIZE],dn; int bfs[SIZE],sons[SIZE]; int used[SIZE],tt,tt2,father[SIZE]; vector<int>qq,resident[100001]; LL an[SIZE]; template <class T> void maa(T& x,T y){ if(x<y)x=y; } template <class T> void mii(T& x,T y){ if(x>y)x=y; } void build(int st){ bfs[0]=st; tt2--; used[st]=tt2; int i=0,j=1; for(;i<j;i++){ int x=bfs[i]; sons[x]=1; REP(k,SZ(e[x])){ int y=e[x][k].F; if(used[y]==tt||used[y]==tt2)continue; father[y]=x; used[y]=tt2; bfs[j++]=y; } } int num=j; for(i=j-1;i>=0;i--){ int x=bfs[i]; if(sons[x]*2>=num){ qq.PB(x); used[x]=tt; REP(k,SZ(e[x])){ int y=e[x][k].F; if(used[y]!=tt)build(y); } return; } sons[father[x]]+=sons[x]; } } void init(){ tt++; qq.clear(); build(0); } int exist[SIZE],nn[SIZE],tt3; LL dis[SIZE],dp[SIZE]; void add(int st,int vv){ bfs[0]=st; dis[st]=vv; int i=0,j=1; tt2--; used[st]=tt2; for(;i<j;i++){ int x=bfs[i]; REP(k,SZ(resident[x])){ if(exist[resident[x][k]]==tt3){ an[resident[x][k]]+=dis[x]*nn[resident[x][k]]+dp[resident[x][k]]; } } REP(k,SZ(e[x])){ int y=e[x][k].F; if(used[y]==tt||used[y]==tt2)continue; used[y]=tt2; dis[y]=dis[x]+e[x][k].S; bfs[j++]=y; } } REP(k,j){ int x=bfs[k]; REP(k,SZ(resident[x])){ if(exist[resident[x][k]]!=tt3){ exist[resident[x][k]]=tt3; nn[resident[x][k]]=0; dp[resident[x][k]]=0; } nn[resident[x][k]]++; dp[resident[x][k]]+=dis[x]; } } } void solve(){ tt++; REP(i,SZ(qq)){ int me=qq[i]; used[me]=tt; tt3++; REP(j,SZ(resident[me])){ if(exist[resident[me][j]]!=tt3){ exist[resident[me][j]]=tt3; dp[resident[me][j]]=0; nn[resident[me][j]]=0; } nn[resident[me][j]]++; } REP(j,SZ(e[me])){ int you=e[me][j].F; if(used[you]!=tt) add(you,e[me][j].S); } } } int main(){ DRII(N,T); { dn=0; REPP(i,1,N){ DRIII(x,y,v); x--;y--; e[x].PB(MP(y,v)); e[y].PB(MP(x,v)); } init(); REP(i,T){ DRI(Q); while(Q--){ DRI(x); x--; resident[x].PB(i); } } solve(); REP(i,T)printf("%lld\n",an[i]); } return 0; }