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

之间求解最小覆盖都是在二分图中,二分图是一个无向图,而有向图就不能直接求解了,需要一些特殊的手段。

DAG的最小路径点覆盖指的是,在DAG中用尽量少的不相交的简单路径覆盖DAG中所有的点(每个点恰好覆盖一次)。 

求解方法:设一个DAG,有n个点,增加n个节点,将每个点x拆分成x和x+n两部分,如果有有向边x->y,则连接一条x->y+n的边,这样的图叫做拆点二分图。DAG的最小路径点覆盖 = n - 拆点二分图的最大匹配。求一下拆点二分图的最大匹配就可以解决这个问题。

拓展:DAG的最小路径可重复点覆盖,指的是DAG中用尽量少的可相交的简单路径覆盖DAG中所有的点(每个点至少覆盖一次)。

求解方法:与DAG的最小路径点覆盖相似,对于相交的路径例如x->p->y和a->p>b,多建立两个边x->y和a->b,对图中所有的这样的边都这样操作一次,相当于求了一个传递闭包,然后再求拆点二分图的最大匹配,后面的就和DAG的最小路径点覆盖一样了。

总结:DAG的最小路径点覆盖,相当于求拆点二分图的最大匹配。DAG的最小路径可重复点覆盖,相当于先求一个传递闭包(floyd),再计算一次最小路径点覆盖。

发布了204 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43701790/article/details/104692900
今日推荐