class LCA: def __init__(self, graph, weight, root=0): self.tree = graph self.root = root self.n = len(graph) self.weight = weight self.k = self._get_bit() self.dist = [-1]*self.n self.parent = [[-1]*self.n for _ in range(self.k)] self._dfs() self._doubling() def _get_bit(self): k = 1 while (1<>i&1: u = self.parent[i][u] if u==v: return u for i in reversed(range(self.k)): if self.parent[i][u]!=self.parent[i][v]: u = self.parent[i][u] v = self.parent[i][v] return self.parent[0][u] def get_dist(self, u, v): return self.dist[u]+self.dist[v]-2*self.dist[self.query(u, v)] def get_weight(self, u, v): a = self.query(u, v) pa = self.kth_ancestor(a, 1) pw = self.weight[pa] if pa==-1: pw = 0 return self.weight[u]+self.weight[v]-self.weight[a]-pw def is_on_path(self, u, v, a): return self.get_dist(u, a)+self.get_dist(a, v)==self.get_dist(u, v) def kth_ancestor(self, u, k): for i in range(self.k): if (k>>i)&1: u = self.parent[i][u] if u == -1: break return u if __name__=='__main__': n = int(input()) g = [[] for _ in range(n)] for _ in range(n-1): a, b = map(int, input().split()) g[a].append(b) g[b].append(a) u = [int(input()) for _ in range(n)] lca = LCA(g, u) ans = 0 for _ in range(int(input())): a, b, c = map(int, input().split()) ans += lca.get_weight(a, b)*c print(ans)