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

有向有环图的最小路径覆盖
本文纯属YY……

今天多校联合训练三的C题, http://acm.hdu.edu.cn/showproblem.php?pid=3861,题意归结起来是在一个有向图中求最小路径覆盖,也就是用尽量少的链去覆盖整个图,每个顶点必须属于且只能属于一条链。但是题意并未说明原图无环。标程解法是强连通分量缩点,再求有向无环图的最小路径覆盖。反例是:1->2,2->3,4->5,5->6,2->5,5->2。正解是2,123一组,456一组。

因为是要求路径数最小,所以YY了一个上下界最小流的做法。构图是将原来的点A0拆成两个,A和A'。从A到A'连一条边,下界和上界都为1。所有原来A0的出边,都从A'出去,下界0,上界1.所有原来A0的入边,都指向A。新建一个源点S,一个汇点T。从S到每个点A连一条边,下界0,上界1。从每个A'到T连一条边,下界0,上界1。

对这个新图求最小流,即为原题所求。

YY的证明:
A->A',限制了这个点必须经过一次。这条边上的流量有两个来源:其它的点B',或者源点S,前者说明A和B在同一条链中,B是A的前驱,后者说明A是链的起点。同样,这个流量有两个去处:其它的点C',或者汇点T,前者说明A和C在同一条链中,C是A的后继,后者说明A是链的终点。

到达汇的每1单位流量,意味着一条链的终结。所以最小流就能让链数最少。

YY完毕,欢迎开炮……


ps. 理论上说,以上方法肯定是错的。要不然求Hamiltion通路就不是NP了@。@

你可能感兴趣的:(有向有环图的最小路径覆盖)