题目描述
给定一棵 n 个顶点的带权树。记 w(u,v) 为顶点 u,v 之间边的权值。
考虑从顶点 u 到顶点 v 的唯一简单路径:
P=(u,s1,s2,…,sk−1,v)。
按从 u 走向 v 的顺序,把路径上的边权记为:
a=(a1,a2,…,ak),
其中 a1=w(u,s1),a2=w(s1,s2),……,ak=w(sk−1,v)。
定义:
$\displaystyle f(u,v)=\sum_{i=1}^{k}\max_{1\le j\le i}a_j$。
也就是说,从 u 向 v 行走时,每经过一条边,都记录“到目前为止遇到的最大边权”,并把这些前缀最大值全部相加。
现在有 q 个询问。每个询问给出两个顶点 (ui,vi),你需要计算 f(ui,vi)。
注意 f(u,v) 一般不等于 f(v,u)。
当 u=v 时,路径不含边,答案为 0。
输入格式
第一行包含两个整数 n,q:
- 1≤n≤2⋅105;
- 1≤q≤105。
接下来 n−1 行,每行包含三个整数 ai,bi,ci:
- 1≤ai,bi≤n;
- ai=bi;
- 1≤ci≤109。
表示顶点 ai 与 bi 之间有一条权值为 ci 的边。保证这些边构成一棵树。
接下来 q 行,每行包含两个整数 ui,vi,表示一个询问。
输出格式
输出 q 行。
第 i 行输出一个整数 f(ui,vi)。
样例
5 4
3 1 2
3 5 8
3 4 7
5 2 1
2 1
1 2
4 5
5 5
17
18
15
0
样例说明
对于询问 2→1,路径边权依次为 (1,8,2),前缀最大值依次为 (1,8,8),因此答案为 1+8+8=17。
对于询问 1→2,边权依次为 (2,8,1),前缀最大值为 (2,8,8),答案为 18。
对于询问 4→5,边权依次为 (7,8),答案为 7+8=15。
子任务
| 子任务 |
限制 |
分值 |
| 1 |
n,q≤100 |
12 |
| 2 |
n,q≤2000 |
13 |
| 3 |
树是一条链,且边按 (ai=i,bi=i+1) 给出 |
15 |
| 4 |
每个询问 (ui,vi) 中,从 ui 到 vi 的路径都会经过顶点 r(某个固定顶点) |
| 5 |
q≤15000 |
| 6 |
无额外限制 |
30 |