【发布时间】:2020-05-17 21:12:20
【问题描述】:
我正在尝试解决这个问题:
给定一棵由 n 个节点组成的有根树。节点是 编号为 1,2,…,n,节点 1 是根。每个节点都有一种颜色。
你的任务是为每个节点确定不同颜色的数量 在节点的子树中。
蛮力解决方案是为每个节点存储一个集合,然后在深度优先搜索中累积合并它们。那将在n^2 中运行,效率不高。
我如何有效地解决这个(以及同类问题)?
【问题讨论】:
-
我不明白它是怎样的
O(n^2)。如果树或多或少平衡,我们有T(n) = 2T(n/2) + O(n)(合并为O(n)),这意味着T(n) = O(n log n)。 -
树可能根本不平衡。我们对此一无所知。这在平衡树中是正确的,但是很容易创建复杂度大于 O(n log n) 的反例
-
更具体地说,创建一个长度为 n / 2 的路径,为路径上的每个节点添加额外的子节点(叶) - 总共 n 个节点。合并那个需要 O(n^2) 时间。
-
从cses.fi/problemset/task/1139 复制粘贴,不注明出处。我们要求您注明所有复制材料的来源:stackoverflow.com/help/referencing