有向无环图的最小路径点覆盖

在DAG中,用尽量少的简单路径,覆盖DAG的所有顶点,这叫做DAG的最小路径点覆盖;

最小不相交路径覆盖:每一条路径经过的顶点各不相同。

最小可相交路径覆盖:每一条路径经过的顶点可以相同。

先看最小不相交路径覆盖,我们将它进行拆点二分图,对于图中存在的边(i,j)连接(i,j');

特别的,每个点自己也可以称为是路径覆盖,只不过路径的长度是0。

  显然地:每条路径的终点入度都是1,出度为0;

  一开始每个点都是独立的一条路径,总共有n条不相交路径。我们每次在二分图里找一条匹配边就相当于把两条路径合成了一条路径,也就相当于路径数减少了1。所以找到了几条匹配边,路径数就减少了多少。那么我们就是找最少的终点数;这也就是n-最大的二分图匹配数;

而对于最小可相交路径覆盖,我们可以FLoyd传递闭包,得出(X,Y)之间是否存在简单路径;

  显然地:在原图中可能并不存在一条边(x,y),但可以从x走到y,这期间会经过一些点;但是如果两个点a和b是连通的,那么可以在这两个点之间加边,a就可以直达b,不必经过中点的,于是就这样转化成了最小不相交路径覆盖。

这种东西虽然属于模板。但证明一定要想明白,因为网络流太活了!

原文地址:https://www.cnblogs.com/kamimxr/p/11656692.html