神J上树
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

神树大人和神J来到了神仙树公园。遗憾的是,神仙树公园里没有任何神仙树,只有一棵n个点的普普通通的有根树(以1号点为根)。这棵树每条边有边权。神J打算在这棵树上来回横跳,但神J每次只能从一个节点u跳到它的子孙v,代价为u×dist(u,v)。v是u的子孙当且仅当u在v到根节点的路径上。
神J提出了m个询问,每次询问两个点s,t,由于你是神树大人和神J的司机,所以神J想让你尽快告诉他是否能从s到t,如果能到则最小代价为多少。

点击下载大样例

输入描述:

第一行输入两个数n,m接下来n-1行,每行三个数u,v,w表示树上的边。接下来m行,每行两个数s,t表示询问。

输出描述:

输出m行。如果不能到达,输出-1。否则输出神J从s到t的最小代价。
示例1

输入

复制
10 15
1 7 8
1 4 1
1 9 7
1 2 9
4 5 3
2 10 2
9 6 1
7 8 9
5 3 3
2 2
1 10
1 1
1 1
1 8
5 3
2 10
5 5
1 2
1 1
4 5
7 1
2 1
5 3
5 3

输出

复制
0
11
0
0
17
15
4
0
9
0
12
-1
-1
15
15

备注:

对于30%的数据,n≤300,m≤300000

对于另外10%的数据,n≤3000,m≤3000

对于另外30%的数据,这棵树是一条链。

对于100%的数据,n,m≤300000,1≤w_i≤107