时间限制: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