Modular Production Line

时空限制: 1000ms /65536K

 

An automobile factory has a car production line. Now the market is oversupply and the production line is often shut down. To make full use of resources, the manager divides the entire production line into N parts(1...N). Some continuous parts can produce sub-products. And each of sub-products has their own value. The manager will use spare time to produce sub-products to make money. Because of the limited spare time, each part of the production line could only work at most K times. And Because of the limited materials, each of the sub-products could be produced only once. The manager wants to know the maximum value could he make by produce sub-products.

Input

The first line of input is T, the number of test case.

The first line of each test case contains three integers,N,K and M. (M is the number of different sub-product).

The next MM lines each contain three integers Ai​,Bi​,Wi​ describing a sub-product. The sub-product has value Wi​. Only Ai​ to Bi​ parts work simultaneously will the sub-product be produced (include Ai​ to Bi​).

1≤T≤100

1≤K≤M≤200

1≤N≤10^5

1≤Ai​≤Bi​≤N

1≤Wi​≤10^5

Output

For each test case output the maximum value in a separate line.

样例输入

4
10 1 3
1 2 2
2 3 4
3 4 8
10 1 3
1 3 2
2 3 4
3 4 8
100000 1 3
1 100000 100000
1 2 3
100 200 300
100000 2 3
1 100000 100000
1 150 301
100 200 300

样例输出

10
8
100000
100301

题目来源

ACM-ICPC 2018 焦作赛区网络预赛


最大权不相交路径问题.与最长K可重区间问题几乎是一样的。

有一点不同的是在最长K可重区间问题中每个区间端点是不算在区间交集里的,而在这个问题中区间端点是算在区间交集里的。把每个区间右端点加一,就可以转化为最长K可重区间问题了。

还有一点要注意的是,在最长K可重区间问题中,参考博客给了两种解法,而这里的数据量比较大,因此只能用第二种的离散化方法来写。

#include<bits/stdc++.h>
#define INF INT_MAX/2
#define N 800
using namespace std; typedef struct
{
int u,v,next;
int flow,cost;
}ss; ss edg[*N];
int head[N];
int now_edge=; void addedge(int u,int v,int flow,int cost)
{
edg[now_edge]=(ss){u,v,head[u],flow,cost};
head[u]=now_edge++;
edg[now_edge]=(ss){v,u,head[v],,-cost};
head[v]=now_edge++;
} bool spfa(int s,int t,int &flow,int &cost)
{
int dis[N];
for(int i=;i<N;i++)dis[i]=INF;
dis[s]=; int vis[N]={};
vis[s]=; queue<int>q;
q.push(s); int addflow[N]={};
addflow[s]=INF; int pre[N]={}; while(!q.empty())
{
int now=q.front();
q.pop();
vis[now]=; for(int i=head[now];i!=-;i=edg[i].next)
{
ss e=edg[i]; if(e.flow>&&dis[e.v]>dis[now]+e.cost)
{
dis[e.v]=dis[now]+e.cost;
addflow[e.v]=min(addflow[now],e.flow);
pre[e.v]=i; if(!vis[e.v])
{
q.push(e.v);
vis[e.v]=;
}
}
}
} if(dis[t]==INF)return false; flow+=addflow[t];
cost+=addflow[t]*dis[t]; int now=t;
while(now!=s)
{
edg[pre[now]].flow-=addflow[t];
edg[pre[now]^].flow+=addflow[t];
now=edg[pre[now]].u;
} return true;
} void MCMF(int s,int t,int &flow,int &cost)
{
while(spfa(s,t,flow,cost));
} struct
{
int l,r,value;
}arr[N]; int lsh[N],len_lsh;
int f(int x)
{
return lower_bound(lsh,lsh+len_lsh,x)-lsh+;
} void init()
{
for(int i=;i<N;i++)head[i]=-;
now_edge=;
len_lsh=;
} int main()
{
int t=;
scanf("%d",&t);
while(t--)
{
init();
int n,k,m;
scanf("%d %d %d",&n,&k,&m); for(int i=;i<m;i++)
{
scanf("%d %d %d",&arr[i].l,&arr[i].r,&arr[i].value);
arr[i].r++;
lsh[len_lsh++]=arr[i].l;
lsh[len_lsh++]=arr[i].r;
} sort(lsh,lsh+len_lsh);
len_lsh=unique(lsh,lsh+len_lsh)-lsh; int s=len_lsh+,t=s+;
addedge(s,,k,);
addedge(len_lsh,t,INF,);
for(int i=;i<len_lsh;i++)addedge(i,i+,INF,); for(int i=;i<m;i++)addedge(f(arr[i].l),f(arr[i].r),,-arr[i].value); int cost=,flow=;
MCMF(s,t,flow,cost);
printf("%d\n",-cost);
}
return ;
}

Modular Production Line的更多相关文章

  1. Modular Production Line (MCMF)

    Modular Production Line \[ Time Limit: 1000ms\quad Memory Limit: 65536kB \] 题意 给出 \(N\) 种零件,现在你可以用连续 ...

  2. 【网络流】Modular Production Line

    [网络流]Modular Production Line 焦作上的一道,网络流24题中的原题.... https://nanti.jisuanke.com/t/31715 给出了1e5个点,但是因为最 ...

  3. ACM-ICPC 2018 焦作赛区网络预赛 F. Modular Production Line (区间K覆盖-最小费用流)

    很明显的区间K覆盖模型,用费用流求解.只是这题N可达1e5,需要将点离散化. 建模方式步骤: 1.对权值为w的区间[u,v],加边id(u)->id(v+1),容量为1,费用为-w; 2.对所有 ...

  4. 焦作F Modular Production Line 费用流

    题目链接 题解:这道题比赛的时候,学弟说是网络流,当时看N这么大,觉得网络流没法做,实际本题通过巧妙的建图,然后离散化. 先说下建图方式,首先每个覆盖区域,只有左右端点,如果我们只用左右端点的话,最多 ...

  5. 2018 ACM 网络选拔赛 焦作赛区

    A. Magic Mirror #include <cstdio> #include <cstdlib> #include <cmath> #include < ...

  6. ACM-ICPC 2018 焦作赛区网络预赛 Solution

    A. Magic Mirror 水. #include <bits/stdc++.h> using namespace std; int t; ]; inline bool work() ...

  7. ACM-ICPC 2018 焦作赛区网络预赛

    这场打得还是比较爽的,但是队友差一点就再过一题,还是难受啊. 每天都有新的难过 A. Magic Mirror Jessie has a magic mirror. Every morning she ...

  8. ACM-ICPC 2018 焦作网络赛

    题目顺序:A F G H I K L 做题链接 A. Magic Mirror 题意:判断 给出的 字符串 是否等于"jessie",需要判断大小写 题解:1.用stl库 tolo ...

  9. 计算机视觉code与软件

    Research Code A rational methodology for lossy compression - REWIC is a software-based implementatio ...

随机推荐

  1. ubuntu 14.04 安装tomcat服务器 配置图片路径和文件路径

    root@hett-PowerEdge-T30:/usr/local/src# lltotal 235956drwxr-xr-x  6 root root      4096  3月 26 14:48 ...

  2. 设置windows status bar隐藏

    info.plist View controller-based status bar appearance 为 NO CGContextSaveGState: invalid context 0x0 ...

  3. Android计算器简单逻辑实现

    Android计算器简单逻辑实现 引言: 我的android计算器的实现方式是:按钮输入一次,就处理一次. 但是如果你学过数据结构(栈),就可以使用表达式解析(前缀,后缀)处理. 而这个方式已经很成熟 ...

  4. (转)SpringMVC学习(二)——SpringMVC架构及组件

    http://blog.csdn.net/yerenyuan_pku/article/details/72231385 相信大家通过前文的学习,已经对SpringMVC这个框架多少有些理解了.还记得上 ...

  5. 关于用终端运行php来测试推送的问题

    照网上的方法,合并好了证书的pem,密码也是对的,然后也写好了推送用的php文件,在终端里php这个文件,报错报错内容是:Warning: stream_socket_client(): SSL op ...

  6. dp 20190618

    C. Party Lemonade 这个题目是贪心,开始我以为是背包,不过也不太好背包,因为这个L都已经是1e9了. 这个题目怎么贪心呢?它是因为这里有一个二倍的关系,所以说val[i]=val[i- ...

  7. ucosii(2.89) 在Lpc1765移植中定时器的使用。

    1,lpc1765的systicker register是24bit, cpu 频率64Mhz时候,注意不要设置systicker 的值超过24bit. 2, 使用timer 的callback函数, ...

  8. 爬虫_python3_requests_2

    pip install requests 进行简单的操作 发送一个get请求 # 发送请求 import requests response = requests.get('http://httpbi ...

  9. 换个语言学一下 Golang (1)

    做技术的总是有些拗.这么多年一直在.net的框框里打转转.直到现在市场上.net工作越来越难找,项目越来越老才发现不做出改变不行了.就从学习Go开始吧. Go语言的特点 简洁.快速.安全 并行.有趣. ...

  10. 第1节 flume:11、flume的failover机制实现高可用

    1.4 高可用Flum-NG配置案例failover 在完成单点的Flume NG搭建后,下面我们搭建一个高可用的Flume NG集群,架构图如下所示: 图中,我们可以看出,Flume的存储可以支持多 ...