问题与局部选择 ​
给加权有向图和根
缩环与重赋权 ​
若最轻入边形成环
其中
局部贪心失败例子 ​
三个非根顶点各自最便宜入边可能形成
边界与方向 ​
这不是 Prim/Kruskal 的有向版,不能套无向 cut property。根、入树形图还是出树形图、最小还是最大版本会整体反转边方向或权重。平行边与负权可处理,但重赋权和展开映射必须保存原边身份;未指定根的 optimum branching 是不同问题。
收缩正确性图像 ​
环
展开时若递归树不选进入超点的边,说明收缩环所在分量对根不可达,输入不可行或前面处理有误。多层嵌套环需用栈保存每次环成员、选中入边和原边映射,按逆序展开。
缩环后怎样恢复入边 ​
对环
递归解若选择某条进入收缩点、原终点为
一次实现需要保存:每轮各顶点所选入边、每个有向环的成员、重赋权边对应的原边,以及递归返回时被替换的环顶点。只在收缩图上保存端点和新费用,会在展开时无法还原原始边集合。
经典朴素实现为
参考资料
- Yoeng-Jin Chu, Tseng-Hong Liu, On the Shortest Arborescence of a Directed Graph, 1965.
- Jack Edmonds, Optimum Branchings, J. Research NBS, 1967.
- Robert Tarjan, Finding Optimum Branchings, Networks, 1977.