题目描述 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、从每个