BZOJ_4276_[ONTAK2015]Bajtman i Okrągły Robin_线段树优化建图+最大费用最大流
BZOJ_4276_[ONTAK2015]Bajtman i Okrągły Robin_线段树优化建图+最大费用最大流
Description
Input
Output
Sample Input
1 4 40
2 4 10
2 3 30
1 3 20
Sample Output
90
S对每个强盗连边(1,c[i]),每个强盗对所在时间连边(1,0),每个时间对T连边(1,0)。
然后跑最大费用最大流。
这是一个朴素的想法,然后我们发现强盗的时间都是一段连续的区间。
线段树优化建图,结点连向儿子(inf,0),叶子连向T,相当于多开出4n的辅助结点,主要的连边方式不变。
注意每次增广时只会使流量+1,因此不需要找一遍最小的流。
反正我不加这个优化就T了。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 25050
#define M 200050
#define inf 0x3f3f3f3f
int head[N],to[M],nxt[M],flow[M],cnt=1,val[M];
int ls[N],rs[N],tot=2,S=1,T=2,Q[N],l,r,inq[N],dis[N],path[N],n,maxl,aa[N],bb[N],cc[N];
void add(int u,int v,int f,int c) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; flow[cnt]=f; val[cnt]=c;
to[++cnt]=u; nxt[cnt]=head[v]; head[v]=cnt; flow[cnt]=0; val[cnt]=-c;
}
bool spfa() {
memset(dis,0x80,sizeof(dis));
memset(path,0,sizeof(path));
dis[S]=0; l=r=0; Q[r++]=S;
while(l!=r) {
int x=Q[l++],i; inq[x]=0; if(l==tot+1) l=0;
for(i=head[x];i;i=nxt[i]) {
if(dis[to[i]]<dis[x]+val[i]&&flow[i]) {
dis[to[i]]=dis[x]+val[i];
path[to[i]]=i^1;
if(!inq[to[i]]) {
inq[to[i]]=1;
if(dis[to[i]]>dis[Q[l]]) {
l--; if(l==-1) l=tot; Q[l]=to[i];
}
else {
Q[r++]=to[i]; if(r==tot+1) r=0;
}
}
}
}
}
return path[T];
}
void mcmf() {
int nf,i,ans=0;
while(spfa()) {
ans+=dis[T];
for(i=T;i!=S;i=to[path[i]]) {
flow[path[i]^1]--;
flow[path[i]]++;
}
}
printf("%d\n",ans);
}
void build(int l,int r,int &p) {
p=++tot;
if(l==r) {add(p,T,1,0);return ;}
int mid=(l+r)>>1;
build(l,mid,ls[p]); build(mid+1,r,rs[p]);
add(p,ls[p],inf,0); add(p,rs[p],inf,0);
}
void update(int l,int r,int x,int y,int p) {
if(x<=l&&y>=r) {
add(tot,p,1,0); return ;
}
int mid=(l+r)>>1;
if(x<=mid) update(l,mid,x,y,ls[p]);
if(y>mid) update(mid+1,r,x,y,rs[p]);
}
int main() {
register int i,root=0;
scanf("%d",&n);
for(i=1;i<=n;i++) {
scanf("%d%d%d",&aa[i],&bb[i],&cc[i]); bb[i]--;
maxl=max(maxl,bb[i]);
}
build(1,maxl,root);
for(i=1;i<=n;i++) {
tot++; add(S,tot,1,cc[i]); update(1,maxl,aa[i],bb[i],root);
}
mcmf();
}
BZOJ_4276_[ONTAK2015]Bajtman i Okrągły Robin_线段树优化建图+最大费用最大流的更多相关文章
- 【BZOJ4276】[ONTAK2015]Bajtman i Okrągły Robin 线段树优化建图+费用流
[BZOJ4276][ONTAK2015]Bajtman i Okrągły Robin Description 有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2 ...
- BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin [线段树优化建边]
4276: [ONTAK2015]Bajtman i Okrągły Robin 题意:\(n \le 5000\)个区间\(l,r\le 5000\),每个区间可以选一个点得到val[i]的价值,每 ...
- [ONTAK2015]Bajtman i Okrągły Robin
bzoj 4276: [ONTAK2015]Bajtman i Okrągły Robin Time Limit: 40 Sec Memory Limit: 256 MB Description 有 ...
- 4276: [ONTAK2015]Bajtman i Okrągły Robin
4276: [ONTAK2015]Bajtman i Okrągły Robin Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 345 Solved ...
- G. 神圣的 F2 连接着我们 线段树优化建图+最短路
这个题目和之前写的一个线段树优化建图是一样的. B - Legacy CodeForces - 787D 线段树优化建图+dij最短路 基本套路 之前这个题目可以相当于一个模板,直接套用就可以了. 不 ...
- BZOJ4276 : [ONTAK2015]Bajtman i Okrągły Robin
建立线段树, S向每个叶子连边,容量1,费用0. 孩子向父亲连边,容量inf,费用0. 每个强盗向T连边,容量1,费用为c[i]. 对应区间内的点向每个强盗,容量1,费用0. 求最大费用流即可. #i ...
- BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin
最大权值匹配,贪心匈牙利即可. 检查一些人是否能被全部抓住可以采用左端点排序,右端点优先队列处理. By:大奕哥 #include<bits/stdc++.h> using namespa ...
- BZOJ 4276 [ONTAK2015]Bajtman i Okrągły Robin 费用流+线段树优化建图
Description 有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2],...,[b[i]-1,b[i]]这么多段长度为1时间中选出一个时间进行抢劫,并计划抢 ...
- bzoj 4276: [ONTAK2015]Bajtman i Okrągły Robin【线段树+最大费用最大流】
--因为T点忘记还要+n所以选小了所以WA了一次 注意!题目中所给的时间是一边闭一边开的区间,所以读进来之后先l++(或者r--也行) 线段树优化建图,很神.(我记得还有个主席树优化建树的?)首先考虑 ...
随机推荐
- 531. Lonely Pixel I
Given a picture consisting of black and white pixels, find the number of black lonely pixels. The pi ...
- Perl、PHP、Python、Java和Ruby的比较
提问 ◆ Perl.Python.Ruby和PHP各自有何特点? ◆ 为什么动态语言多作为轻量级的解决方案? ◆ LAMP为什么受欢迎? ◆ Ruby on Rails为什么会流行? ◆ 编程语言的发 ...
- CentOS 7.5 安装Docker 教程
Docker简介 Docker是一个开源的容器引擎,它有助于更快地交付应用.Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理. 使用Docker可更快地打包.测试以及部署 ...
- spring boot 添加mybatis,以及相关配置
首先在pom.xml文件里加入 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifa ...
- Oracle SQL Developer Chanage UI to US Lanaguage
\sqldeveloper-4.1.3.20.78-x64\sqldeveloper\sqldeveloper\bin Add content: AddVMOption -Duser.country= ...
- Invocation of destroy method failed on bean with name ‘XXXX’
项目启动报错问题:Invocation of destroy method failed on bean with name 'scopedTarget.eurekaClient': org.spri ...
- [Node.js] Trigger a File Download in Express
Downloading and saving a file is a common scenario when building out your web application. Using Exp ...
- js正則表達式:验证邮箱格式、password复杂度、手机号码、QQ号码
$(function () { $("input[name='sub']").on("click", function () { if (!isEmail($( ...
- mysql 内置函数大全 mysql内置函数大全
mysql 内置函数大全 2013年01月15日 19:02:03 阅读数:4698 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代 ...
- Table tr 的隔行变色
<style type="text/css"> table{border-collapse:collapse;border:1px solid #999;} td ...