[ 网络流 主席树 ] BZOJ3218
2017-10-13 08:28
232 查看
将答案转化为
∑(wi+bi)−∑whitebi−∑blackwi−∑strangepi
然后就是和bzoj3681一样的套路。
∑(wi+bi)−∑whitebi−∑blackwi−∑strangepi
然后就是和bzoj3681一样的套路。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define INF 1e9 #define N 5010 #define M 200000 inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; } inline void Read(int& x){ char c=nc(); for(;c<'0'||c>'9';c=nc()); for(x=0;c>='0'&&c<='9';x=(x<<3)+(x<<1)+c-48,c=nc()); } int cl[M],cr[M]; int i,j,k,n,m,cnt,t; int Rt ; int a ,b ,w ,L ,R ,p ; int c[N*3],l,Ans; namespace gjghfd{ struct Edge{ int t,nx,c; }e[2500000]; int h[M],d[M],cur[M],num=1; bool b[M]; int q[M]; inline void Add(int x,int y,int w){ e[++num].t=y;e[num].c=w;e[num].nx=h[x];h[x]=num; e[++num].t=x;e[num].c=0;e[num].nx=h[y];h[y]=num; } inline bool Bfs(){ memset(b,0,sizeof(b)); b[0]=1;int l=0,r=1;q[1]=0; while(++l<=r){ int x=q[l]; for(int i=h[x];i;i=e[i].nx) if(e[i].c&&!b[e[i].t]) b[e[i].t]=1,d[e[i].t]=d[x]+1,q[++r]=e[i].t; } return b[t]; } inline int Dfs(int x,int y){ if(!y||x==t)return y; int Ans=0; for(int& i=cur[x];i;i=e[i].nx){ int v=e[i].t,f; if(d[v]==d[x]+1&&(f=Dfs(v,min(y,e[i].c)))){ Ans+=f;y-=f;e[i].c-=f;e[i^1].c+=f; if(!y)break; } } if(y)d[x]=-1; return Ans; } inline int Dinic(){ int Ans=0; while(Bfs()){ for(int i=0;i<=t;i++)cur[i]=h[i]; Ans+=Dfs(0,INF); } return Ans; } } inline void Update(int& x,int y,int f,int l,int r,int z){ x=++cnt; if(f)gjghfd::Add(x,f,INF); if(y)gjghfd::Add(y,x,INF); if(l==r){ gjghfd::Add(z<<1,x,INF); return; } int Mid=l+r>>1; if(a[z]<=Mid)cr[x]=cr[y],Update(cl[x],cl[y],x,l,Mid,z);else cl[x]=cl[y],Update(cr[x],cr[y],x,Mid+1,r,z); } inline void Query(int x,int l,int r,int L,int R,int y){ if(!x||l>R||r<L)return; if(l>=L&&r<=R){ gjghfd::Add(x,y,INF); return; } int Mid=l+r>>1; Query(cl[x],l,Mid,L,R,y);Query(cr[x],Mid+1,r,L,R,y); } int main(){ Read(n); for(i=1;i<=n;i++)Read(a[i]),Read(b[i]),Read(w[i]),Read(L[i]),Read(R[i]),Read(p[i]),Ans+=w[i]+b[i]; cnt=(n<<1); for(i=1;i<=n;i++){ if(i>1)Rt[i]=Rt[i-1],Query(Rt[i],0,INF,L[i],R[i],(i<<1)-1); Update(Rt[i],Rt[i],0,0,INF,i); } t=++cnt; for(i=1;i<=n;i++){ gjghfd::Add(0,i<<1,w[i]); gjghfd::Add(i<<1,t,b[i]); gjghfd::Add((i<<1)-1,i<<1,p[i]); } printf("%d\n",Ans-gjghfd::Dinic()); return 0; }
相关文章推荐
- 【bzoj3218】 a + b Problem 最小割+主席树
- BZOJ3218 UOJ#77 A+B Problem(最小割+主席树)
- bzoj 3218 a + b Problem(最小割+主席树)
- BZOJ3218 UOJ#77 A+B Problem(最小割+主席树)
- bzoj 3218: a + b Problem【主席树+最小割】
- bzoj 3681: Arietta 主席树优化建图+网络流+dsu on tree
- BZOJ 3218 a + b Problem 网络流 可持久化线段树优化建图
- [BZOJ 3218] A + B Problem 【可持久化线段树 + 网络流】
- [ 网络流 树上启发式合并 主席树 ] BZOJ3681
- bzoj 3218: a + b Problem|最小割|主席树
- 【主席树】 BZOJ 2653 middle
- BZOJ 3514: Codechef MARCH14 GERALD07加强版( LCT + 主席树 )
- 【ZJOI2017 Round1练习&BZOJ4765】D1T3 普通计算姬(主席树,分块)
- BZOJ 2127 happiness ——网络流
- bzoj 2653 二分+主席树
- BZOJ 1061: [Noi2008]志愿者招募(线性规划与网络流)
- bzoj 3130: [Sdoi2013]费用流 网络流+二分答案
- [BZOJ]4012: [HNOI2015]开店 树链剖分+主席树(线段树合并)
- bzoj3524: [Poi2014]Couriers(主席树)
- [bzoj1061][Noi2008]志愿者招募【网络流】【线性规划】