POJ3680_Intervals
给你若干个区间,每个区间有一个权值,你可以选出某些区间,使得在保证没有任何一段的覆盖次数超过k的前提下,总的权值最大。
这个建模真的十分神奇,赞一个。
对于给出的每一个区间,离散化,最终我们可以知道所有区间的端点的个数不会超过2n,然后我们加边,(i,i+1,k,0),对于每个区间我们加边(li,ri,1,-wi)。
这样我们跑出最小费用,就是答案了,仔细理解一下就知道了,这就是题目的等价模型,保证了流量的限制。
召唤代码君:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define maxn 422
#define maxm 84444
using namespace std; int to[maxm],cap[maxm],cost[maxm],next[maxm],first[maxn],edge;
int d[maxn],num[maxn],from[maxn],tag[maxn],TAG=;
int Q[maxm],bot,top;
int a[maxm],u[maxn],v[maxn],w[maxn];
int n,m,N,K,T,s,t,ans; void _init()
{
s=,t=n+,ans=,edge=-;
for (int i=s; i<=t; i++) first[i]=-;
} void addedge(int U,int V,int W,int C)
{
edge++;
to[edge]=V,cap[edge]=W,cost[edge]=C,next[edge]=first[U],first[U]=edge;
edge++;
to[edge]=U,cap[edge]=,cost[edge]=-C,next[edge]=first[V],first[V]=edge;
} bool bfs()
{
Q[bot=top=]=s,tag[s]=++TAG,d[s]=,num[s]=K,from[s]=-;
while (bot<=top){
int cur=Q[bot++];
for (int i=first[cur]; i!=-; i=next[i])
if (cap[i]> && (tag[to[i]]!=TAG || d[cur]+cost[i]<d[to[i]])){
tag[to[i]]=TAG;
num[to[i]]=min(num[cur],cap[i]);
d[to[i]]=d[cur]+cost[i];
from[to[i]]=i;
Q[++top]=to[i];
}
}
if (tag[t]!=TAG || d[t]>=) return false;
ans+=num[t]*d[t];
for (int i=t; from[i]!=-; i=to[from[i]^])
cap[from[i]]-=num[t],cap[from[i]^]+=num[t];
return true;
} int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&N,&K);
for (int i=; i<N; i++){
scanf("%d%d%d",&u[i],&v[i],&w[i]);
a[i]=u[i],a[i+N]=v[i];
}
sort(a,a+N+N);
n=unique(a,a+N+N)-a;
for (int i=; i<N; i++){
u[i]=lower_bound(a,a+n,u[i])-a+;
v[i]=lower_bound(a,a+n,v[i])-a+;
}
_init();
for (int i=; i<=n; i++) addedge(i,i+,K,);
for (int i=; i<N; i++) addedge(u[i],v[i],,-w[i]);
while (bfs()) ;
printf("%d\n",-ans);
}
return ;
}
POJ3680_Intervals的更多相关文章
随机推荐
- PyCharm、IntelliJ IDEA等jetbrains软件授权服务器
Paste_Image.png 图上链接:http://idea.qinxi1992.cnhttp://blog.lanyus.com/archives/174.htmlhttp://www.idea ...
- 随笔3- list array
今天看到了一段代码 使用 数组去初始化赋值给list,就是把指针的首地址和end地址的下一位传递给list,把内存中这段长度copy到list中, 回忆起以前看到的一个资料 摘自C++ Primer ...
- python sorted和sort
我们需要对List进行排序,Python提供了两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序 方法2.用built-in函数sorted进行排序(从2.4开始) ...
- 使用gson解析,生成Json
包:gson-2.3.jarJson文本解析为Java对象:Java对象生成为Json文本 import com.google.gson.Gson; public class TestGson { c ...
- selenium2 WebDriver 在asp.net项目中的应用
selenium2 WebDriver是一款跨平台的 自动化测试工具,它可以操纵浏览器,模拟用户行为,非常方便用户进行自动化测试. .net项目使用它,首先要通过 Visual Studio 的 nu ...
- leetcode 136
136. Single Number Given an array of integers, every element appears twice except for one. Find that ...
- QuerySet转化为JSON
import json data = json.dumps(list(my_table.objects.all().values())) return HttpResponse(data)
- PHP面向对象的标准
(1)所有数据都应该隐藏在所在的类的内部. (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者. (3)尽量减少类的协议中的消息. (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深 ...
- Solr Cloud搭建
1:搭建tomcat 配置connector: server.xm文件中: <Connector port="8080"maxThreads="200" ...
- SQL Server SELECT逻辑处理顺序
SQL Server SELECT语句,逻辑处理顺序,虽然SELECT位于语句最前面,它在逻辑处理中,基本上是最后一个被执行的部分. 下面列出查询子句在逻辑上处理顺序: 1. FROM 2. WH ...