[BZOJ1001] [BJOI2006] 狼抓兔子
2017-12-10 22:50
281 查看
给定一个稀疏平面图,求其最小割。(点数N≤1000000)
题目都翻译成这样了,也没有做法之说,甚至成了模板题。
手打队列开小了,刚开始RE了半天……
题目都翻译成这样了,也没有做法之说,甚至成了模板题。
手打队列开小了,刚开始RE了半天……
#include<iostream> #include<cstring> #include<cstdio> using namespace std; struct Item{int p,c,nxt;} it[8000005]; int dis[1000005],n,m,s,t,ans,tans,t1,t2,t3,ind,bus[1000005],pbus[1000005],cnt; int qu[10000005]; struct Queue{ int head,tail; inline void push(int x){ qu[++tail]=x;} inline void pop(){ head++;} inline int front(){ return qu[head];} inline int size(){ return tail-head+1;}} q; int dinic_bfs(){ q.push(s); memset(dis,0xff,sizeof dis); dis[s]=1; while(q.size()) { int p=q.front(); q.pop(); for(register int i=bus[p]; i>=0; i=it[i].nxt) if(dis[it[i].p]<0 && it[i].c>0) q.push(it[i].p), dis[it[i].p]=dis[p]+1;} return dis[t]>0;} int dinic_dfs(int p,int lim){ cnt++; int flow=0; if(p==t) return lim; for(int val,&i=pbus[p]; i>=0; i=it[i].nxt) if(dis[it[i].p]==dis[p]+1 && it[i].c>0) if(val=dinic_dfs(it[i].p,min(lim,it[i].c))){ it[i].c-=val, it[i^1].c+=val; flow+=val; lim-=val; if(lim==0) break;} return flow;} inline void link(int p,int q,int w){ it[ind].nxt=-1; it[ind].p=q; it[ind].c=w; it[ind].nxt=bus[p]; bus[p]=ind; ind++;} inline void make(int p,int q,int w){ link(p,q,w);} void dinic(){ while(dinic_bfs()) { memcpy(pbus,bus,sizeof bus); while(tans=dinic_dfs(s,1e+9)) ans+=tans;}} int main(){ memset(bus,0xff,sizeof bus); q.head=1;q.tail=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m-1;j++) scanf("%d",&t1), make(i*m-m+j,i*m-m+j+1,t1), make(i*m-m+j+1,i*m-m+j,t1); for(int i=1;i<=n-1;i++) for(int j=1;j<=m;j++) scanf("%d",&t1), make(i*m-m+j,i*m+j,t1), make(i*m+j,i*m-m+j,t1); for(int i=1;i<=n-1;i++) for(int j=1;j<=m-1;j++) scanf("%d",&t1), make(i*m-m+j,i*m+j+1,t1), make(i*m+j+1,i*m-m+j,t1); s=1; t=n*m; dinic(); printf("%d\n",ans); }
相关文章推荐
- 【BJOI2006】bzoj1001 狼抓兔子
- bzoj 1001 BJOI2006 狼抓兔子 最小割
- 【BZOJ1001】【BJOI2006】狼抓兔子
- [bzoj1001][BJOI2006]狼抓兔子——最大流转最短路,平面图
- 【BZOJ】【1001】 【BJOI2006】狼抓兔子
- [BJOI2006] [BZOJ1001] 狼抓兔子|最大流|最短路
- BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
- [BJOI2006][bzoj1001] 狼抓兔子 [最小割]
- BZOJ1001: [BeiJing2006]狼抓兔子
- Bzoj1001 [BeiJing2006]狼抓兔子
- BZOJ1001 [Beijing2006] 狼抓兔子
- [BZOJ1001][BeiJing2006]狼抓兔子 && 平面网络流
- bzoj 1001: [BeiJing2006]狼抓兔子
- bzoj 1001: [BeiJing2006]狼抓兔子
- BZOJ 1001: [BeiJing2006]狼抓兔子(最短路)
- bzoj 1001: [BeiJing2006]狼抓兔子
- BZOJ 1001 [BeiJing2006] 狼抓兔子
- BZOJ 1001: [BeiJing2006]狼抓兔子 对偶图
- 【BZOJ 1001】[BeiJing2006]狼抓兔子
- 【BZOJ1001】[BeiJing2006]狼抓兔子 对偶图最短路