生活在树上
题号:NC212812
时间限制:C/C++/Rust/Pascal 5秒,其他语言10秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

每个人都有自己的人生坐标,也有对未来的美好期望。
 
家庭可能对我们有不同的预期,社会也可能会赋予我们别样的角色。

在不断变化的现实生活中,个人与家庭、社会之间的落差或错位难免会产生。
 
对此,你有怎样的体验与思考?写一段代码,谈谈自己的看法。

牛牛生活在一棵树上,这个树有 n 个节点。

每个人有 4 个参数  x_1,y_1,x_2,y_2

我们定义一个人自己的人生坐标为一个集合 S,S 是从树上的节点  x_1 到节点 y_1 的最短路径经过的节点构成的集合。

而家庭的预期、社会赋予的角色则是另一个集合 T,T 是从树上的节点  x_2 到节点  y_2 的最短路径经过的节点构成的集合。

定义树上两个点的距离为它们的最短路径经过的边数。

我们定义个人与家庭、社会之间的落差值为 S 中的任意一个节点和 T 中任意一个节点的距离之和,即 ,dis(x,y) 表示 x,y 的距离。

牛牛作为人生导师,需要帮助 q 个人计算他们的个人与家庭、社会之间的落差值。

但是这个计算量太大了,于是牛牛找到了你。

输入描述:

第一行两个正整数 n, q 表示树的大小和牛牛需要帮助计算的人数。

后面 n-1 行每行两个正整数数 u_i,v_i,表示u_i,v_i之间有一条边相连。

后面 q 行每行 4 个正整数 x_1,y_1,x_2,y_2,表示一个人的参数。

输出描述:

q 行,每行一个数,第 i 行表示第 i 个人个人与家庭、社会之间的落差值。
示例1

输入

复制
7 4
1 2
2 3
2 4
4 5
1 6
6 7
1 2 6 7 	
3 5 4 7
3 7 5 6
1 1 1 1

输出

复制
8
44
49
0

备注:

n,q <= 300000