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] ...
随机推荐
- SpringMvc获取上下文
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.spri ...
- 经验之谈—控制器的view的显示
经验之谈—控制器的view的显示 开发中,我们经常需要将一个控制器的view添加到另一个控制器的view上,这种效果是我们期望看到的,但是里边隐藏着一些细节,不注意的话,可能会达不到我们想到的效果. ...
- 自定义App首次启动引导页
代码如下 #import"ZBGuidePageView.h" @interfaceZBGuidePageView()<UIScrollViewDelegate> @p ...
- C++中vector,set,map自定义排序
一.vector排序 vector支持cmp,就类似数组,可以直接sort. #include <iostream> #include <algorithm> #include ...
- django项目创建requirements.txt文件
workon+虚拟环境名 然后输入 pip freeze > requirements.txt
- dom4j解析器sax解析xml文件
1.使用dom4j解析器解析xml ***解析器dom4j是由dom4j组织提供的,针对xml进行解析.dom4j不是Javase的一部分,使用时需要导入dom4j的jar包(官网下载) 在eclip ...
- Flask之endpoint错误View function mapping is overwriting an existing endpoint function: ***
最近在学习Flask, 其中遇到了一个错误, 发现这个问题和Flask, 路由有关系, 所以就记了下来 错误代码: from flask import Flask, render_template, ...
- YII2.0学习一 Advanced 模板安装
下载github上的完事安装包(本机环境使用Composer安装非常慢) https://github.com/yiisoft/yii2-app-advanced 解压到文件目录 wwwroot/sh ...
- 终于搞定了cxgrid的多行表头(转终于搞定了cxgrid的多行表头 )
终于搞定了cxgrid的多行表头 转自:http://mycreature.blog.163.com/blog/static/556317200772524226400/ 这一周都在处理dbg ...
- liunx下搭建python开发环境
=============================================================================注意: 在linux下安装新的版本的pytho ...