网络流24题之最长k可重区间集问题
对于每个点向后一个点连流量为k费用为0的边
对每一区间连l到r流量为1费用为r-l的边
然后最小费用最大流,输出取反
一开始写的r-l+1错了半天。。。
By:大奕哥
#include<bits/stdc++.h>
using namespace std;
const int N=,inf=1e9;
int head[N],d[N],f[N],l[N],r[N],a[N],s=1e9,t,n,k,cnt=-,cost;
bool v[N];
struct node{
int to,nex,f,w,c;
}e[];
void add(int x,int y,int w,int c)
{
e[++cnt].to=y;e[cnt].w=w;e[cnt].f=x;e[cnt].c=c;e[cnt].nex=head[x];head[x]=cnt;
e[++cnt].to=x;e[cnt].w=;e[cnt].f=y;e[cnt].c=-c;e[cnt].nex=head[y];head[y]=cnt;
}
queue<int>q;
bool spfa()
{
memset(f,-,sizeof(f));
memset(d,0x3f,sizeof(d));
memset(v,,sizeof(v));
d[s]=;v[s]=;q.push(s);
while(!q.empty())
{
int x=q.front();q.pop();v[x]=;
for(int i=head[x];i!=-;i=e[i].nex)
{
int y=e[i].to;
if(d[y]<=d[x]+e[i].c||!e[i].w)continue;
d[y]=d[x]+e[i].c;f[y]=i;
if(!v[y])q.push(y),v[y]=;
}
}
if(d[t]>1e9)return ;
int flow=inf;
for(int i=f[t];i!=-;i=f[e[i].f])
flow=min(flow,e[i].w);
for(int i=f[t];i!=-;i=f[e[i].f])
e[i].w-=flow,e[i^].w+=flow,cost+=e[i].c*flow;
return ;
}
int main()
{
scanf("%d%d",&n,&k);int num=;
memset(head,-,sizeof(head));
for(int i=;i<=n;++i)
{
scanf("%d%d",&l[i],&r[i]);
a[++num]=l[i];a[++num]=r[i];
}
sort(a+,a++num);
num=unique(a+,a++num)-a-;
for(int i=;i<=n;++i)
{
int x=r[i]-l[i];
l[i]=lower_bound(a+,a++num,l[i])-a;
r[i]=lower_bound(a+,a++num,r[i])-a;
add(l[i],r[i],,-x);
}
for(int i=;i<num;++i)
add(i,i+,k,);t=num+;
add(num,t,k,);
add(,,k,);s=;
while(spfa());
printf("%d\n",-cost);
return ;
}
网络流24题之最长k可重区间集问题的更多相关文章
- 【网络流24题】最长k可重区间集(费用流)
[网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...
- LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集
#6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 ...
- loj #6014. 「网络流 24 题」最长 k 可重区间集
#6014. 「网络流 24 题」最长 k 可重区间集 题目描述 给定实直线 L LL 上 n nn 个开区间组成的集合 I II,和一个正整数 k kk,试设计一个算法,从开区间集合 I II 中选 ...
- 【网络流24题】最长k可重区间集问题(费用流)
[网络流24题]最长k可重区间集问题 [问题分析] 最大权不相交路径问题,可以用最大费用最大流解决. [建模方法] 方法1 按左端点排序所有区间,把每个区间拆分看做两个顶点<i.a>< ...
- 网络流24题:最长 k 可重区间集问题题解
最长 k 可重区间集问题题解: 突然想起这个锅还没补,于是来把这里补一下qwq. 1.题意简述: 有\(n\)个开区间,这\(n\)个开区间组成了一个直线\(L\),要求选择一些区间,使得在直线\(L ...
- 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集
题目描述 给定实直线 \(L\) 上 \(n\) 个开区间组成的集合 \(I\) ,和一个正整数 \(k\) ,试设计一个算法,从开区间集合 \(I\) 中选取出开区间集合 \(S \subseteq ...
- 「网络流 24 题」最长 k 可重区间集
给定区间集合$I$和正整数$k$, 计算$I$的最长$k$可重区间集的长度. 区间离散化到$[1,2n]$, $S$与$1$连边$(k,0)$, $i$与$i+1$连边$(k,0)$, $2n$与$T ...
- 【PowerOJ1756&网络流24题】最长k可重区间集问题(费用流)
题意: 思路: [问题分析] 最大权不相交路径问题,可以用最大费用最大流解决. [建模方法] 方法1 按左端点排序所有区间,把每个区间拆分看做两个顶点<i.a><i.b>,建立 ...
- 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题
题目描述 给定平面 \(\text{xoy}\) 上 \(n\) 个开线段组成的集合 \(\text{I}\) ,和一个正整数 \(k\) ,试设计一个算法. 从开线段集合 \(\text{I}\) ...
随机推荐
- 关于Cookie跨域的问题研究
Cookie是一个伟大的发明,它允许Web开发者保留他们的用户的登录状态.但是当你的站点有一个以上的域名时就会出现问题了.在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名 ...
- select多选框
select多选框 效果: 代码: <HTML> <HEAD> <TITLE>选择下拉菜单</TITLE> <meta http-equiv=&q ...
- composer 上提交自己的包
先在github上复制自己的地址在 https://packagist.org/packages/submit ->check->submit
- Vue修改mint-ui默认样式(默认风格)
加入my-mint.css 我这里用的postcss的变量定义,如果亲们用的是其他预处理器,要改成其他处理器的定义方式 覆盖mint-ui的primary颜色,改为自己UI的主题色 --main-co ...
- JS日历控件特效代码layDate
https://www.js-css.cn/a/jscode/date/2015/0405/1461.html
- Perl6多线程3: Promise start / in / await
创建一个Promise 并自动运行: my $p = Promise.start({say 'Hello, Promise!'}); 如果把代码改成如下, 我们会发现什么也没打印: ;say 'Hel ...
- defer用途
package main /* defer :程序退出时执行,先进后执行 defer庸碌: 1.关闭文件句柄 2.锁资源释放 3.数据库连接释放 */ import ( "fmt" ...
- usb_submit_urb 解释的够够的
/** * usb_submit_urb - issue an asynchronous transfer request for an endpoint * @urb: pointer to the ...
- 记一次spring boot中MongoDB Prematurely reached end of stream的异常解决
在spring boot项目中使用了mongodb,当一段时间没有操作mongodb,下次操作mongodb时就会出现异常.异常如下: org.springframework.data.mongodb ...
- python之pandas&&DataFrame(二)
简单操作 Python-层次聚类-Hierarchical clustering >>> data = pd.Series(np.random.randn(10),index=[[' ...