【发布时间】:2021-12-30 10:22:25
【问题描述】:
问题:
给定一个包含 N 个节点和 M 条边的图,边的索引从 1 -> M 开始。保证任意2个节点之间都有路径。
您需要为 M 条边分配权重。 权重在[1...M]的范围内,每个数字只能出现一次。
简而言之,答案应该是 [1...M] 的排列数组,其中 arr[i] = x 表示 edge[i] 的权重为 x。
给定一个由 n-1 条边组成的集合 R。 R 保证是图的生成树。
找到一种分配权重的方法,使 R 成为图的最小生成树,如果有多个答案,则打印具有最小字典顺序的答案。
约束:
N, M <= 10^6
示例:
边缘:
3 4
1 2
2 3
1 3
1 4
R = [2, 4, 5]
Answer: 3 4 5 1 2
说明:
如果您像上图那样为图形分配权重,则 MST 将是集合 R,并且它具有最小的字典顺序。
我对 O(N^2) 的看法:
因为它要求最小的字典顺序,所以我遍历边列表,以递增的顺序分配权重。最初,w = 1。可能有 3 种情况:
- 如果edge[i]在R中,赋权重[i] = w,w加1
- 如果边缘 [i] 不在 R 中:假设边缘 [i] 连接节点 u 和 v。为 R 中从 u 到 v 的路径中的每个边缘分配权重并增加 w(如果该边缘尚未分配) .然后为edge[i]分配权重并增加w
- 如果分配了 edge[i],跳过它
有什么方法可以改进我的解决方案,使其可以在 O(N.logN) 或更短的时间内工作?
【问题讨论】:
标签: algorithm minimum-spanning-tree disjoint-sets