如何编写动态树

时间:2015-04-07 04:20:41

标签: algorithm data-structures tree

描述

总共有n个节点的树,每个节点都有一个权重,我们可以假设它是整数。我们在这些树上有一些操作:

  1. Link(x,y) - 链接两个节点x和y,我们可以假设之前x和y之间没有边缘,我们可以假设在添加edge(x,y)之后,Graph仍然是一棵树
  2. 剪切(x,y) - 擦除x和y之间的边缘,我们可以假设之前在(x,y)之间存在边缘。
  3. QueryMIN_Path(x,y) - 获取路径x-> y中的最小权重,输入数据保证x和y之间有一条路径。
  4. QueryMIN_Subtree(x) - 在x的子树中记录最小权重
  5. Modify_Path(x,y,z) - 添加z到路径x中的每个节点 - > y,输入数据保证x和y之间有一条路径。
  6. Modify_Subtree(x,z) - 添加z到子树x
  7. 中的每个节点
  8. Change_root(x) - 更改包含x的树的根,x成为根
  9. 我们可以假设所有操作都是正确的。

    目标

    我需要在分摊的时间内按操作在O(log(n))中运行所有这些操作。

0 个答案:

没有答案