Unverified Commit 8a91cd59 authored by mgt/Enter-tainer's avatar mgt/Enter-tainer Committed by GitHub
Browse files

Merge pull request #2653 from ShaoChenHeng/dmst

parents 61bf52df 3bfb0630
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
## 最小树形图

有向图上的最小生成树(Minimum Directed Spanning Tree)称为最小树形图。
有向图上的最小生成树(Directed Minimum Spanning Tree)称为最小树形图。

常用的算法是朱刘算法(也称 Edmonds 算法),可以在 $O(nm)$ 时间内解决最小树形图问题。

@@ -58,7 +58,7 @@ bool solve() {
}
```

## Tarjan 的 MDST 算法
## Tarjan 的 DMST 算法

Tarjan 提出了一种能够在 $O(m+n\log n)$ 时间内解决最小树形图问题的算法。

@@ -80,7 +80,7 @@ Tarjan 的算法分为 **收缩** 与 **伸展** 两个过程。接下来先介

2. 如果 $b$ 被记录过了,就说明出现了环。总结点数加一,并将环上的所有结点重新编号,对堆进行合并,以及结点/超级结点的总权值的更新。更新权值操作就是将环上所有结点的入边都收集起来,并减去环上入边的边权。

![mdst1](./images/mdst1.png)
![dmst1](./images/dmst1.png)

以图片为例,左边的强连通图在收缩后就形成了右边的一棵收缩树,其中 $a$ 是结点 1 与结点 2 收缩后的超级结点, $b$ 是结点 3,结点 4,结点 5 收缩后的超级结点, $A$ 是两个超级结点 $a$ 与 $b$ 收缩后形成的。

(37.2 KiB)

File moved.

+1 −1
Original line number Diff line number Diff line
当出现形如“给定 $n$ 个整数,求这 m 个整数能拼凑出多少的其他整数( $n$ 个整数可以重复取)”,以及“给定 $n$ 个整数,求这 $n$ 个整数不能拼凑出的最小(最大)的整数”的问题时可以使用同余最短路的方法。
当出现形如“给定 $n$ 个整数,求这 $n$ 个整数能拼凑出多少的其他整数( $n$ 个整数可以重复取)”,以及“给定 $n$ 个整数,求这 $n$ 个整数不能拼凑出的最小(最大)的整数”的问题时可以使用同余最短路的方法。

同余最短路利用同余来构造一些状态,可以达到优化空间复杂度的目的。

+1 −1
Original line number Diff line number Diff line
@@ -340,7 +340,7 @@ nav:
    - 拓扑排序: graph/topo.md
    - 最小生成树: graph/mst.md
    - 斯坦纳树: graph/steiner-tree.md
    - 最小树形图: graph/mdst.md
    - 最小树形图: graph/dmst.md
    - 最短路: graph/shortest-path.md
    - 拆点: graph/node.md
    - 差分约束: graph/diff-constraints.md