更改树的根后获取高度的最快方法是什么?

时间:2018-08-05 04:14:33

标签: java

我有一棵有n个节点和m个查询的树。对于每个查询,他们都要求我从给定节点中查找树的高度(假设他们选择该节点作为根)。

我们将拥有最多10^5个节点和10^5个查询。

仅从一个节点作为根获得高度很简单。但是对于这个问题,我没有找到有效的解决方法。

对于每个查询,我必须一次又一次遍历树。需要太多时间。

必须存在某种方式,我可以从任何节点作为根仅遍历一棵树,然后计算每个查询的高度。

那么,有什么解决办法吗?

问题出在这里:

您将获得一棵具有n个顶点和m个查询的树。对于每个查询,在选择顶点R作为根时找到树的高度

第一行包含N,即顶点数。 1 <= n <= 10^5

接下来的N-1行遵循类型U V,表示存在从U到V的路径。0 <= U, V <= n - 1

下一行包含m,即查询数1 <= m <= 10^5

后跟m行,每行包含一个选择为根的顶点R。

输出每个查询的高度。

input
5
0 1
0 2
2 3
3 4
5
0
1
2
3
4
output
3
4
2
3
4

0 个答案:

没有答案