博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
COGS743. [网络流24题] 最长k可重区间集
阅读量:4984 次
发布时间:2019-06-12

本文共 1093 字,大约阅读时间需要 3 分钟。

743. [网络流24题] 最长k可重区间集

★★★   输入文件:interv.in   输出文件:interv.out   简单对比

时间限制:1 s   内存限制:128 MB

9 13

interv.out


这样的区间建图比较好想,因为以前做过用最短路的最小区间覆盖问题,想法类似

BYVOID:

离散化所有区间的端点,把每个端点看做一个顶点,建立附加源S汇T。

1、从S到顶点1(最左边顶点)连接一条容量为K,费用为0的有向边。

2、从顶点2N(最右边顶点)到T连接一条容量为K,费用为0的有向边。
3、从顶点i到顶点i+1(i+1<=2N),连接一条容量为无穷大,费用为0的有向边。
4、对于每个区间[a,b],从a对应的顶点i到b对应的顶点j连接一条容量为1,费用为区间长度的有向边。

 

两点:

1.相邻的连一条边,避免了每个点都和s t连边

2.容量限制为k,经过每个点的边数一定<=k

#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N=1005,M=1e5+5,INF=1e9;inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){
if(c=='-')f=-1; c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();} return x*f;}int n,k,mp[N],m,l[N],r[N],s,t;int Bin(int v){ int l=1,r=m; while(l<=r){ int mid=(l+r)>>1; if(mp[mid]==v) return mid; if(v
e[i].f&&d[v]>d[u]+w){ d[v]=d[u]+w; pos[v]=i;pre[v]=u; if(!inq[v]){ inq[v]=1; if(d[v]

 

转载于:https://www.cnblogs.com/candy99/p/6185232.html

你可能感兴趣的文章
div滚动条
查看>>
iOS越狱程序开发
查看>>
一个监听事件监听多个按钮
查看>>
调用其他类的方法
查看>>
SQlite数据库
查看>>
前端开发要注意的浏览器兼容性问题整理
查看>>
Python服务器开发 -- 网络基础
查看>>
开源项目Html Agility Pack实现快速解析Html
查看>>
一些常用的js,jquerry 样例
查看>>
Oracle PL/SQL 多重选择句
查看>>
dorado中的creationType选择类型
查看>>
C++11 数值类型和字符串的相互转换
查看>>
无锡盈达聚力科技有限公司
查看>>
tyvj1659中中救援队
查看>>
kubernetes学习:CKA考试题
查看>>
LINUX samba的安装使用
查看>>
CSS border 生成三角
查看>>
asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)
查看>>
7.STM32中GPIO理解
查看>>
base64 json
查看>>