bzoj 3232: 圈地游戏
2017-09-29 14:52
369 查看
学过的知识早忘了,不会写,又怕写错,果断转载:CQzhangyu
code:
code:
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; const double eps=1e-5; struct node{ int x,y,next,other; double c; }a[2110000];int last[3000],len=0; int s[3000],h[3000],st,ed; void ins(int x,int y,double c) { int k1=++len; a[len].x=x;a[len].y=y;a[len].c=c; a[len].next=last[x];last[x]=len; int k2=++len; a[len].x=y;a[len].y=x;a[len].c=0.0; a[len].next=last[y];last[y]=len; a[k1].other=k2;a[k2].other=k1; } bool bt_h() { memset(h,0,sizeof(h)); int l=1,r=2;s[l]=st;h[st]=1; while(l!=r) { int x=s[l]; for(int i=last[x];i;i=a[i].next) { int y=a[i].y; if(h[y]==0&&a[i].c>0) h[y]=h[x]+1,s[r++]=y; } l++; } return h[ed]!=0; } double findflow(int x,double f) { if(x==ed) return f; double t,ans=0.0; for(int i=last[x];i;i=a[i].next) { int y=a[i].y; if(h[x]+1==h[y]&&a[i].c>0&&ans<f) { ans+=(t=findflow(y,min(a[i].c,f-ans))); a[i].c-=t;a[a[i].other].c+=t; } } if(ans==0) h[x]=0; return ans; } int n,m,num=0; int A[55][55],ys[55][55],he[55][55],sh[55][55]; bool check(double X) { memset(last,0,sizeof(last));len=0; double tot=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { int x=ys[i][j]; ins(st,x,(double)A[i][j]); tot+=(double)A[i][j]; ins(x,ys[i-1][j],X*he[i][j]); ins(x,ys[i+1][j],X*he[i+1][j]); ins(x,ys[i][j-1],X*sh[i][j]); ins(x,ys[i][j+1],X*sh[i][j+1]); } double ans=0.0; while(bt_h()) ans+=findflow(st,999999999.0); return tot-ans>0; } int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&A[i][j]); for(int i=1;i<=n+1;i++) for(int j=1;j<=m;j++) scanf("%d",&he[i][j]); for(int i=1;i<=n;i++) for(int j=1;j<=m+1;j++) scanf("%d",&sh[i][j]); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ys[i][j]=++num; st=0;ed=++num; for(int i=1;i<=n;i++) ys[i][0]=ys[i][m+1]=ed; for(int i=1;i<=m;i++) ys[0][i]=ys[n+1][i]=ed; double l=0.0,r=2500000; while(l+eps<r) { double mid=(l+r)/2; if(check(mid)) l=mid; else r=mid; } printf("%.3lf",l); }
相关文章推荐
- BZOJ 3232: 圈地游戏 分数规划+判负环
- bzoj 3232: 圈地游戏 01分数规划
- BZOJ3232: 圈地游戏
- bzoj 3232: 圈地游戏【分数规划+最小割】
- 【BZOJ 3232】圈地游戏 二分+SPFA判环/最小割经典模型
- [二分答案][网络流验证][BZOJ 3232]圈地游戏
- 【BZOJ 3232】圈地游戏 分数规划+最大权闭合图
- bzoj3232: 圈地游戏 0-1分数规划
- 【BZOJ3232】圈地游戏 分数规划+最小割
- BZOJ3232: 圈地游戏
- bzoj 3232: 圈地游戏 01分数规划
- [置顶] bzoj3232: 圈地游戏 0-1分数规划
- BZOJ 3105: [cqoi2013]新Nim游戏
- 【bzoj1443】【JSOI2009】【游戏game】【二分图博弈】
- BZOJ 4515 [Sdoi2016]游戏
- bzoj1457 棋盘游戏
- [BZOJ3729]Gty的游戏(博弈论+Splay)
- bzoj 1188 [HNOI2007]分裂游戏
- bzoj1059:[ZJOI2007]矩阵游戏【二分图匹配】
- 【BZOJ】1443: [JSOI2009]游戏Game