【COGS743】最长k可重区间集问题 最大权不相交路径

题目描述 Description

给定实直线L 上n 个开区间组成的集合I,和一个正整数k,试设计一个算法,从开区
间集合I 中选取出开区间集合S属于I,使得在实直线L 的任何一点x,S 中包含点x 的开区间
个数不超过k,且sum(| z |) z属于S,达到最大。这样的集合S称为开区间集合I的最长k可重区间集。
sum(| z |) z属于S称为最长k可重区间集的长度。

对于给定的开区间集合I和正整数k,计算开区间集合I的最长k可重区间集的长度。

输入描述 Input Description

第1 行有2 个正整数n和k,分别表示开区间的
个数和开区间的可重迭数。接下来的n行,每行有2个整数,表示开区间的左右端点坐标。

输出描述 Output Description

将计算出的最长k可重区间集的长度输出

样例输入 Sample Input

4 2
1 7
6 8
7 10
9 13

样例输出 Sample Output

15

数据范围及提示 Data Size & Hint


若把每个线段看做点,一组不相交的线段集合就可以看做路径。这样问题就转化为选k条路径使得权值和最大,并且路径不能重叠(一个线段只能选一次)。

方法1

按左端点排序所有区间,把每个区间拆分看做两个顶点 <i.a><i.b> <script type="math/tex" id="MathJax-Element-450"> </script>,建立附加源S汇T,以及附加顶点S’。

1、连接S到S’一条容量为K,费用为0的有向边。
2、从S’到每个 <i.a> <script type="math/tex" id="MathJax-Element-451"> </script>连接一条容量为1,费用为0的有向边。
3、从每个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值