找到具有相同权重的最大边数的生成树

Find a spanning tree with maximum number of edges with same weight

问题来了。

给出一个带权无向连通图G。权重是恒定的。任务是提出一种算法,该算法可以找到满足这两个条件的 G 生成树的总权重(按优先级排序):

我已经坚持了很长一段时间了。我已经实现了图的Boruvka的MST搜索算法,现在我不确定是否应该在找到MST之后进行任何操作,还是修改MST搜索算法本身更好。

欢迎提出任何建议!

这在 O(m^2) 中可以天真地完成,而在 O(mn) 中不需要太多努力。似乎可以更快地完成它,可能像 O(m log^2(n)) 甚至 O(m log(n)) 那样需要一些工作。

基本思路是这样的。对于任何权重 k,设 MST(k) 是一棵生成树,它包含权重 k 的最大可能边数,否则具有最小总权重。可能有多棵这样的树,但它们的总重量都相同,所以你选择哪一棵并不重要。 MST(k) 可以通过使用任何 MST 算法并将权重 k 的所有边视为具有权重 -Infinity.

来找到

对于某些 k,此问题的解决方案将是 MST(k)。因此,天真的解决方案是生成所有 MST(k) 并选择具有最大数量的相同边权重然后最小总权重的那个。使用 Kruskal 算法,您可以在 O(m^2) 中执行此操作,因为您只需要对边缘进行一次排序。

这可以改进为 O(mn),首先使用原始权重找到 MST,然后对于每个 k,通过减少每个树的权重将树修改为 MST(k)权重的边缘 k-Infinity。更新 MST 以减少边权重是一个 O(n) 操作,因为您只需要在相应的 fundamental cycle.

中找到最大权重边

为了比 O(mn) 使用这种方法做得更好,您必须以这样一种方式预处理原始 MST,以便可以更快地执行这些边权重减少。似乎 heavy path decomposition 之类的东西应该可以在这里工作,但还有一些细节需要解决。