给你一个整数 n,以及一棵 无向带权 树,根节点为节点 0,树中共有 n 个节点,编号从 0 到 n - 1。该树由一个长度为 n - 1 的二维数组 edges 表示,其中 edges[i] = [ui, vi, wi] 表示存在一条从节点 ui 到 vi 的边,权重为 wi。
带权中位节点 定义为从 ui 到 vi 路径上的 第一个 节点 x,使得从 ui 到 x 的边权之和 大于等于 该路径总权值和的一半。
给你一个二维整数数组 queries。对于每个 queries[j] = [uj, vj],求出从 uj 到 vj 路径上的带权中位节点。
返回一个数组 ans,其中 ans[j] 表示查询 queries[j] 的带权中位节点编号。
示例 1:
输入: n = 2, edges = [[0,1,7]], queries = [[1,0],[0,1]]
输出: [0,1]
解释:

| 查询 | 路径 | 边权 | 总路径权值和 | 一半 | 解释 | 答案 |
|---|---|---|---|---|---|---|
[1, 0] |
1 → 0 |
[7] |
7 | 3.5 | 从 1 → 0 的权重和为 7 >= 3.5,中位节点是 0。 |
0 |
[0, 1] |
0 → 1 |
[7] |
7 | 3.5 | 从 0 → 1 的权重和为 7 >= 3.5,中位节点是 1。 |
1 |
示例 2:
输入: n = 3, edges = [[0,1,2],[2,0,4]], queries = [[0,1],[2,0],[1,2]]
输出: [1,0,2]
解释:

| 查询 | 路径 | 边权 | 总路径权值和 | 一半 | 解释 | 答案 |
|---|---|---|---|---|---|---|
[0, 1] |
0 → 1 |
[2] |
2 | 1 | 从 0 → 1 的权值和为 2 >= 1,中位节点是 1。 |
1 |
[2, 0] |
2 → 0 |
[4] |
4 | 2 | 从 2 → 0 的权值和为 4 >= 2,中位节点是 0。 |
0 |
[1, 2] |
1 → 0 → 2 |
[2, 4] |
6 | 3 | 从 1 → 0 = 2 < 3,从 1 → 2 = 6 >= 3,中位节点是 2。 |
2 |
示例 3:
输入: n = 5, edges = [[0,1,2],[0,2,5],[1,3,1],[2,4,3]], queries = [[3,4],[1,2]]
输出: [2,2]
解释:

| 查询 | 路径 | 边权 | 总路径权值和 | 一半 | 解释 | 答案 |
|---|---|---|---|---|---|---|
[3, 4] |
3 → 1 → 0 → 2 → 4 |
[1, 2, 5, 3] |
11 | 5.5 | 从 3 → 1 = 1 < 5.5,从 3 → 0 = 3 < 5.5,从 3 → 2 = 8 >= 5.5,中位节点是 2。 |
2 |
[1, 2] |
1 → 0 → 2 |
[2, 5] |
7 | 3.5 | 从 1 → 0 = 2 < 3.5,从 1 → 2 = 7 >= 3.5,中位节点是 2。 |
2 |
提示:
2 <= n <= 105edges.length == n - 1edges[i] == [ui, vi, wi]0 <= ui, vi < n1 <= wi <= 1091 <= queries.length <= 105queries[j] == [uj, vj]0 <= uj, vj < nedges 表示一棵合法的树。