algorithm - 加权图中的最小惩罚路径

标签 algorithm graph language-agnostic dynamic-programming

考虑一个包含 N 个节点和 M 个边的无向图。每条边 Mi 都有一个与其关联的整数成本 Ci

路径的惩罚是一对节点AB之间路径中每个边成本的按位或。换句话说,如果路径包含边 M1,M2,..., Mk 则该路径的惩罚为 C1C2 或 ... 或 Ck

给定一个图和两个节点,AB,找到AB之间的路径可能的最低处罚并打印其处罚;如果不存在这样的路径,则打印 −1 表示不存在从 AB 的路径。

注意:允许循环和多条边。

约束:

1≤N≤103

1≤M≤103

1≤Ci<1024

1≤UiViN

1≤ABN

AB

这个问题是在一场比赛中提出的,它已经结束了,我浏览了教程,但无法得到它。谁能解释或给出如何继续的答案?

最佳答案

可以使用动态规划通过以下递归公式来解决:

D(s,0) = true
D(v,i) = false OR D(v,i) OR { D(u,j) | (u,v) is an edge, j or c(u,v) = i }

其中s是源节点。

这个想法是D(v,i) == true当且仅当存在从sv的带有权重的路径正好是i
现在,您在动态规划中迭代修改图形,直到它收敛(最多在 n 次迭代之后)。
这基本上是 Bellman-Ford algorithm 的变体。 完成为解决方案创建 DP 表后,最小路径为 min { x | D(t,x) = true}(其中 t 是目标节点)。

时间复杂度为O(m*n*log_2(R)),其中R是允许的最大权重(在您的情况下为1024)。

关于algorithm - 加权图中的最小惩罚路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35732479/

相关文章:

algorithm - 在二维数组中查找最长的路线

node.js - 如何使用 NodeJS 创建图表?

algorithm - 切换除最高设置位之后的所有位

web-services - RESTful 服务描述

algorithm - 中值排序的真实名称是什么和/或我在哪里可以找到更多关于它的 Material

algorithm - 设计一个数据结构来返回最近 1 分钟内到 Web 服务器的连接数

algorithm - VF2算法-实现

language-agnostic - 多维插值

python - 我可以通过匹配键作为前缀来在字典中保留新词吗

php - 使用 PHP 中的算法生成序列号