import sys input = sys.stdin.readline from collections import deque def bfs(): depth[0] = 0 queue = deque([]) queue.append(0) while queue: current_node = queue.popleft() for next_node, w in adj_list[current_node]: if depth[next_node] == -1: parent[0][next_node] = current_node depth[next_node] = depth[current_node] + 1 distance[next_node] = distance[current_node] + w queue.append(next_node) def init(): bfs() #initialize depth and parent[0] for k in range(1, log_size): for v in range(N): if parent[k-1][v] == -1: parent[k][v] = -1 else: parent[k][v] = parent[k-1][parent[k-1][v]] def lca(u, v): #return lowest common ancestor when 0 is root node if depth[u] < depth[v]: u, v = v, u for k in range(log_size): if (depth[u]-depth[v])>>k & 1: u = parent[k][u] if u == v: return u for k in range(log_size-1, -1, -1): if parent[k][u] != parent[k][v]: u = parent[k][u] v = parent[k][v] return parent[0][u] def dist(u, v): return distance[u] + distance[v] - 2*distance[lca(u, v)] N = int(input()) adj_list = [[] for _ in range(N)] for _ in range(N-1): ui, vi, wi = map(int, input().split()) adj_list[ui].append((vi, wi)) adj_list[vi].append((ui, wi)) depth = [-1] * N log_size = N.bit_length() parent = [[-1] * N for _ in range(log_size)] distance = [0] * N init() Q = int(input()) for _ in range(Q): xi, yi, zi = map(int, input().split()) print((dist(xi, yi)+dist(yi, zi)+dist(zi, xi)) // 2)