图论中的“拆”

对于图论中的某些问题,我们为了方便解决问题,一种常见的解题策略就是“拆”。这里我给出拆点和拆边的两个典型例子,算一个学习笔记把。

拆点:网络流

网络流中会遇到“某个点只能经过一次”这样的限制条件。由于经典的网络流算法是对边的限制,所以可以将点X拆成<X.a>,<X.b>。原来连入点的边连<X.a>,原来连出点的边连<X.b>。这样我们就可以通过对(<X.a>,<X.b>)的限制来限制点了。

拆边:带花树

给一个无向图和一个对应的顶点度序列(可以不与原图相同)。删去图中一些边能否使顶点的度与序列一一相同。

一条无向边e连着两个点x,y。然后我们将e拆成<e.a>,<e.b>,加入边(x,<e.a>),(y,<e.b>),(<e.a>,<e.b>)。这样我们的匹配可以有两种选择:1、取(x,<e.a>),(y,<e.b>),2、取(<e.a>,<e.b>)。前者表示留下这条边,并消耗了x,y各一个度;后者则删去这条边,那么要得到完备匹配x,y的度就要另找了。

原文地址:https://www.cnblogs.com/oldmanren/p/2344651.html