#include #include using namespace std; int N; vectorG[1<<17]; int pa[20][1<<17]; int cumsum[1<<17]; int depth[1<<17]; int U[1<<17]; void dfs(int u,int p,int cu,int d) { cumsum[u]=cu+=U[u]; pa[0][u]=p; depth[u]=d++; for(int v:G[u]) { if(v!=p) { dfs(v,u,cu,d); } } } int lca(int u,int v) { if(depth[u]>k&1)u=pa[k][u]; } if(u==v)return u; for(int k=20;k--;) { if(pa[k][u]!=pa[k][v]) { u=pa[k][u]; v=pa[k][v]; } } return pa[0][u]; } main() { cin>>N; for(int i=1;i>u>>v; G[u].push_back(v); G[v].push_back(u); } for(int i=0;i>U[i]; dfs(0,-1,0,0); for(int k=1;k<20;k++)for(int i=0;i=0)pa[k][i]=pa[k-1][pa[k-1][i]]; else pa[k][i]=-1; } int M;cin>>M; long ans=0; for(;M--;) { int u,v,c;cin>>u>>v>>c; int g=lca(u,v); ans+=c*(cumsum[u]+cumsum[v]-2*cumsum[g]+U[g]); } cout<