【发布时间】:2011-07-27 12:36:57
【问题描述】:
让有一个无向树T,并让有:T.leaves - 所有的叶子(每个 v 使得d(v) = 1)。我们知道:|T.leaves| 和 distance between u and v for each u,v in T.leaves。
换句话说:我们有一棵无向树,我们知道它有多少叶子,以及每两片叶子之间的距离。
我们需要找到how many inside vertices (d(v)>1) are in the tree。
注意:构建完整的树是不可能的,因为如果我们只有 2 片叶子但它们之间的距离是 2^30,这将花费太长时间......
我尝试从最短距离开始计算它们之间有多少个顶点,然后添加最接近它们的顶点,但为此我需要一些公式 f(leaves_counted,next_leaf) 但我无法管理找到那个...
有什么想法吗?
【问题讨论】:
-
您实际上可以构建这棵树。只需保持非分支路径压缩(存储一条边 + 其长度)并根据需要添加内部节点。所以相隔 2^31 的两个节点只是 2 个节点加上一个标记为 2^31 的物理边。不确定您是否真的需要,但可以。
-
@Rafal:但是当您尝试添加另一个顶点时,您需要检查所有可能性(除非我遗漏了什么),并且您需要遍历这个距离。
-
gr:不一定,你可以像距离是浮点数一样求解方程。
-
@Rafal:需要详细说明吗?如果你有一棵树(不像上面讨论的那样简单,但有很多叶子) - 你如何选择在哪里添加新顶点而不进行迭代两片叶子之间的距离?
-
gr:继续回答。
标签: algorithm tree graph-theory