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

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

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),再计算一次最小路径点覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值