bzoj1001(网络流,最小割)狼抓兔子
2017-05-27 22:48
267 查看
第一个博客,刷道水题吧。。。最大流=最小割
#include<cstdio> #include<cctype> #include<cstring> #include<vector> #include<algorithm> #include<iostream> using namespace std; const int N=1000005,M=6000005; const int oo=2e9+7; int a ,b ,nedge,son ,tot,n,m,gap ,d ,que ,l,r; struct edge{ int nextt,ed,di; }e[M]; inline int read()//²»¹ÜÊÇÕý¸ºÊý£¬¶¼¿ÉÒÔ { int x = 0; char ch = getchar(); bool positive = 1; for (; !isdigit(ch); ch = getchar()) if (ch == '-') positive = 0; for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0'; return positive ? x : -x; } inline void write(int a){ if(a>=10)write(a/10); putchar('0'+a%10); } inline void writeln(int a){ write(a); puts(""); } inline void aedge(int a,int b,int c){ e[++nedge].nextt=son[a]; son[a]=nedge; e[nedge].ed=b; e[nedge].di=c; } inline void ycl(int s,int t) { memset(gap,0,sizeof gap),memset(d,0,sizeof d),++gap[d[t]=1]; que[l=r=1]=t; while(l<=r){ int k=que[l++]; for (int i=son[k];i;i=e[i].nextt)if(!d[e[i].ed])++gap[d[e[i].ed]=d[k]+1],que[++r]=e[i].ed; } } inline int aug(int x,int s,int t,int mmin) { if(x==t)return mmin; int flow=0; for(int i=son[x];i;i=e[i].nextt)if(d[x]==d[e[i].ed]+1){ int tmp=aug(e[i].ed,s,t,min(mmin,e[i].di)); flow+=tmp;mmin-=tmp;e[i].di-=tmp;e[((i-1)^1)+1].di+=tmp; if(!mmin)return flow; } if(!(--gap[d[x]]))d[s]=n+1; ++gap[++d[x]]; return flow; } inline int maxflow(int s,int t) { ycl(s,t); int ans=aug(s,s,t,oo); while(d[s]<=n)ans+=aug(s,s,t,oo); return ans; } int main(){ int nn=read(),mm=read(); n=nn*mm; for(int i=1;i<=nn;i++)for(int j=1;j<mm;j++){ int s1=read(); aedge((i-1)*mm+j,(i-1)*mm+j+1,s1); aedge((i-1)*mm+j+1,(i-1)*mm+j,s1); } for(int i=1;i<nn;i++)for(int j=1;j<=mm;j++){ int s1=read(); aedge((i-1)*mm+j,i*mm+j,s1); aedge(i*mm+j,(i-1)*mm+j,s1); } for(int i=1;i<nn;i++)for(int j=1;j<mm;j++){ int s1=read(); aedge((i-1)*mm+j,i*mm+j+1,s1); aedge(i*mm+j+1,(i-1)*mm+j,s1); } cout<<maxflow(1,n)<<endl; }
相关文章推荐
- BZOJ1001狼抓兔子(网络流最小割)
- BZOJ 1001 狼抓兔子 (网络流最小割/平面图的对偶图的最短路)
- BZOJ1001 [BeiJing2006]狼抓兔子(网络流最小割)
- [bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图
- bzoj 1001 狼抓兔子 平面图最小割
- bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割
- 【BZOJ1001】[BeiJing2006]狼抓兔子【最小割】【最短路】【对偶图】
- BZOJ 1001: [BeiJing2006]狼抓兔子(平面图最小割转对偶图最短路)
- 【BZOJ1001】【Beijing2006】狼抓兔子(平面图转对偶图:最小割+最短路)
- [BJOI2006][bzoj1001] 狼抓兔子 [最小割]
- BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】
- BZOJ 1001 网络流最小割 解题报告
- bzoj1001: [BeiJing2006]狼抓兔子(网络流模板题:最大流)
- BZOJ 1001 狼抓兔子 【平面最小割转最短路】
- 【BZOJ1001】【平面图最小割】狼抓兔子
- BZOJ 1001 狼抓兔子 (最小割转化成最短路)
- 【bzoj 1001】狼抓兔子(最小割)
- 平面圖最小割 BZOJ1001: [BeiJing2006]狼抓兔子 BZOJ 2007: [Noi2010]海拔
- 【BZOJ1001】狼抓兔子(平面图最小割转最短路)
- 狼抓兔子 BZOJ1001 平面图最小割转对偶图最短路