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
建图:
·源点S,汇点T。
·S向所有的小偷连边,容量为1,费用为c[i]。
·所有小偷向对应区间连边,容量为1,费用为0。
·线段树的叶子向T连边,容量为1,费用为0。
·线段树中的点向其左右儿子连边,容量为inf,费用为0。
最大流最大费就是答案。
But,卡常卡死我了......
注意两点(滑稽):
1、为了小常数,以后网络流边的结构体不要定义from这个变量。
2、当你想要卡常的时候,注意不要用结构体去套你的算法......全部东西都用数组吧......
3、我也不知道为什么本机上最快的数组版本上去就T了?所以还是把过了的那个弄上来吧......
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cctype>
#define inf 1e9
using namespace std;
const int MAXN=; int N,a[MAXN],b[MAXN],c[MAXN],up,low=inf;
struct edge{ int to,next,cap,flow,cost; }E[];
int n,s,t,np=,first[],dist[],fl[];
int mq[+],front,rear;
bool inq[];
void add_edge(int u,int v,int cap,int cost)
{
E[++np]=(edge){v,first[u],cap,,cost};
first[u]=np;
E[++np]=(edge){u,first[v],,,-cost};
first[v]=np;
}
int MCMF(){
int maxcost=,now;
while(){
memset(dist,,sizeof(dist));
front=rear=;
mq[rear++]=s,inq[s]=;
while(front!=rear){
int i=mq[front++]; if(front>) front=;
inq[i]=;
for(int p=first[i];p;p=E[p].next){
int j=E[p].to;
if(E[p].cap>E[p].flow&&dist[i]+E[p].cost>dist[j]){
dist[j]=dist[i]+E[p].cost;
fl[j]=p;
if(!inq[j]){
mq[rear++]=j,inq[j]=;
if(rear>) rear=;
}
}
}
}
if(dist[t]<=) break;
now=t,maxcost+=dist[t];
while(now!=s){
E[fl[now]].flow++,E[(fl[now]-^)+].flow--;
now=E[(fl[now]-^)+].to;
}
}
return maxcost;
} int rt=,np2=,lc[],rc[];
void build(int &now,int L,int R){
now=++np2;
if(L==R){
add_edge(now+N,t,,);
return;
}
int m=L+R>>;
build(lc[now],L,m);
build(rc[now],m+,R);
add_edge(now+N,lc[now]+N,inf,);
add_edge(now+N,rc[now]+N,inf,);
}
void update(int now,int L,int R,int A,int B,int id){
if(A<=L&&R<=B){
add_edge(id,now+N,,);
return;
}
int m=L+R>>;
if(B<=m) update(lc[now],L,m,A,B,id);
else if(A>m) update(rc[now],m+,R,A,B,id);
else update(lc[now],L,m,A,B,id),update(rc[now],m+,R,A,B,id);
} void _scanf(int &x)
{
x=;
char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
void data_in()
{
_scanf(N);
for(int i=;i<=N;i++){
_scanf(a[i]);_scanf(b[i]);_scanf(c[i]);
up=max(up,b[i]),low=min(low,a[i]);
}
}
void work()
{
n=*(up-low)+N+,s=n-,t=n;
build(rt,low,up-);
for(int i=;i<=N;i++){
update(rt,low,up-,a[i],b[i]-,i);
add_edge(s,i,,c[i]);
}
printf("%d\n",MCMF());
}
int main()
{
data_in();
work();
return ;
}
BZOJ 4276 [ONTAK2015]Bajtman i Okrągły Robin 费用流+线段树优化建图的更多相关文章
- 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]的价值,每 ...
- 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【线段树+最大费用最大流】
--因为T点忘记还要+n所以选小了所以WA了一次 注意!题目中所给的时间是一边闭一边开的区间,所以读进来之后先l++(或者r--也行) 线段树优化建图,很神.(我记得还有个主席树优化建树的?)首先考虑 ...
- 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 ...
- [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 有 ...
- 【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 ...
- 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_线段树优化建图+最大费用最大流
BZOJ_4276_[ONTAK2015]Bajtman i Okrągły Robin_线段树优化建图+最大费用最大流 Description 有n个强盗,其中第i个强盗会在[a[i],a[i]+1 ...
- Bajtman i Okrągły Robin
Bajtman i Okrągły Robin 题目描述 你是一个保安,你发现有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2],...,[b[i]-1,b[i] ...
随机推荐
- SpringBoot学习17:springboot热部署配置
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...
- 使用jQuery实现数字逆时针旋转
要实现数字逆转,最主要是分析我们页面的元素结果,结合选择器充分利用起来! 例如:以下lable中每一个id和值的安排具有一定结构的意义需要用心分析: jQuery代码:
- HTML5—— 你肯定会用到的新知识
HTML5 简介 语义化标签 新增结构标签 表单 多媒体 HTML5 简介 XML是更加严格的语言 是HTML和XHTML的结合 语义化标签 新增的语义化标签 header nav section a ...
- python——元组(tuple)基本操作
元组被称为只读列表,数据可被查询,但不能被修改,类似于列表的切片操作,元组写在小括号里面()元素之前用逗号隔开 对于一些不想被修改的数据,可以用元组来保存 # 创建元组 1)创建空元组 # 创建空元 ...
- DedeCMS V5.7sp2最新版本parse_str函数SQL注入漏洞
织梦dedecms,在整个互联网中许多企业网站,个人网站,优化网站都在使用dede作为整个网站的开发架构,dedecms采用php+mysql数据库的架构来承载整个网站的运行与用户的访问,首页以及栏目 ...
- mysql5.7.19安装报错 无法定位程序输入点
https://blog.csdn.net/t876587201/article/details/79503688
- wamp调用ICE中间件
wamp调用ICE中间件 wamp 是集成开发包,我的wamp中的php 为5.3.10 ,经过3天艰苦奋战,终于在phpinfo()中看到了 ICE 出现了.. OK,最新的ice 为 3.5.1 ...
- FTP 主动模式与被动模式
项目中涉及到媒资传输的地方,均有ftp应用,而关于媒资传输故障的排查中,FTP主被动模式问题占了较高比例,但又容易被忽略, 特此收集相关资料介绍,同时整理了如何通wget.tcpdum分辨FTP的主被 ...
- 如何打war包
1. 利用jdk里的工具 例如我们要打包的文件在D:\myHome\dist: 运行 cmd: cd D:\myHome\dist 进入D:\myHome\dist 然后输入 D:\myHome\di ...
- LeetCode:18. 4Sum(Medium)
1. 原题链接 https://leetcode.com/problems/4sum/description/ 2. 题目要求 给出整数数组S[n],在数组S中是否存在a,b,c,d四个整数,使得四个 ...