ll@n; int u[n],v[],w[]; rd((u,v,w)(n-1)); wgraphg; g.setEdge(n,n-1,u,v,w); ll d[n]; g.getDistForest(0,d); HLD h; h.init(g.g); int o[n],p[]; g.g.preorder(p); rep(i,n)o[p[i]]=i; ll@q; rep(q){ ll@k; ull x[k]; rep(i,k){ int@xi; x[i]=xi|(ull)o[xi]<<32; } sortA(k,x); int a=x[0],b=a; ll z=0; rep(i,1,k){ int c=x[i]; int e=h.lca(a,c); if(a==e){ e=h.lca(b,c); z+=d[c]-d[e]; }else{ z+=d[a]+d[c]-2d[e]; a=e; } b=c; } wt(z); }