数组开小导致TTTTTLE……
是分数规划,设sm为所有格子价值和,二分出mid之后,用最小割来判断,也就是判断sm-dinic()>=0
这个最小割比较像最大权闭合子图,建图是s像所有点连流量为格子价值的边(相当于最大权闭合子图中的正权点),然后考虑边缘,两个相邻的格子,如果一个选一个不选那么中间这条边就有负的贡献,所以两个相邻的格子之间连两条边权为mid*边权的边,注意是两条,要互相连一下,然后所有边界上的点像t连边权为mid*边界边权的边,相当于假装外面还有一层点全标为t,然后跑最小割判断即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N=105;
const double eps=1e-6,inf=1e9;
int n,m,h[N*N],cnt,s,t,id[N][N],tot,le[N*N];
double a[N][N],b[N][N],c[N][N],sm;
struct qwe
{int ne,to;double va;
}e[N*N*N];
void add(int u,int v,double w)
{cnt++;e[cnt].ne=h[u];e[cnt].to=v;e[cnt].va=w;h[u]=cnt;
}
void ins(int u,int v,double w)
{add(u,v,w);add(v,u,0);
}
bool bfs()
{queue<int>q;memset(le,0,sizeof(le));le[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();for(int i=h[u];i;i=e[i].ne)if(e[i].va>eps&&!le[e[i].to]){le[e[i].to]=le[u]+1;q.push(e[i].to);}}return le[t];
}
double dfs(int u,double f)
{if(u==t||!f)return f;double us=0;for(int i=h[u];i&&us<f;i=e[i].ne)if(e[i].va>eps&&le[e[i].to]==le[u]+1){double t=dfs(e[i].to,min(e[i].va,f-us));e[i].va-=t;e[i^1].va+=t;us+=t;}if(us<eps)le[u]=0;return us;
}
int dinic()
{double re=0;while(bfs())re+=dfs(s,inf);return re;
}
bool ok(double w)
{memset(h,0,sizeof(h));cnt=1,s=0,t=n*m+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)ins(s,id[i][j],a[i][j]);for(int j=1;j<=m;j++)ins(id[1][j],t,w*b[0][j]),ins(id[n][j],t,w*b[n][j]);for(int i=1;i<=n;i++)ins(id[i][1],t,w*c[i][0]),ins(id[i][m],t,w*c[i][m]);for(int i=1;i<n;i++)for(int j=1;j<=m;j++)add(id[i][j],id[i+1][j],w*b[i][j]),add(id[i+1][j],id[i][j],w*b[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<m;j++)add(id[i][j],id[i][j+1],w*c[i][j]),add(id[i][j+1],id[i][j],w*c[i][j]);return sm-dinic()>eps;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%lf",&a[i][j]),id[i][j]=++tot,sm+=a[i][j];for(int i=0;i<=n;i++)for(int j=1;j<=m;j++)scanf("%lf",&b[i][j]);for(int i=1;i<=n;i++)for(int j=0;j<=m;j++)scanf("%lf",&c[i][j]);double l=0,r=n*m*100,ans=0;while(r-l>1e-5){double mid=(l+r)/2;if(ok(mid))l=mid,ans=mid;elser=mid;}printf("%.3f\n",ans);return 0;
}

转载于:https://www.cnblogs.com/lokiii/p/9795805.html

bzoj 3232: 圈地游戏【分数规划+最小割】相关推荐

  1. bzoj 3232 圈地游戏——0/1分数规划(或网络流)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3232 当然是0/1分数规划.但加的东西和减的东西不在一起,怎么办? 考虑把它们合在一起.因为 ...

  2. ZOJ - 2676 Network Wars(01分数规划+最小割)

    题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边组成的无向带权图,现在需要求一个将点 1 和点 n 分开的割集 C ,使得 最小 题目分析:分数式为总权值比上边的数量,换句话说就是一条边只 ...

  3. bzoj 3232: 圈地游戏

    学过的知识早忘了,不会写,又怕写错,果断转载:CQzhangyu code: #include<cstdio> #include<cstdlib> #include<cs ...

  4. zoj 1676Network Wars(胡博涛论文题,01分数规划+最小割)

    题目链接 Network Wars Time Limit: 5 Seconds      Memory Limit: 32768 KB      Special Judge Network of By ...

  5. bzoj 2400: Spoj 839 Optimal Marks(最小割)

    2400: Spoj 839 Optimal Marks Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 873  Solved: 330 [Subm ...

  6. bzoj 1312: Hard Life 01分数规划+网络流

    题目: Description 在一家公司中,人事部经理与业务部经理不和.一次,总经理要求人事部从公司的职员中挑选出一些来帮助业务部经理完成一项任务.人事部经理发现,在公司的所有职员中,有一些人相处得 ...

  7. bzoj3232: 圈地游戏 0-1分数规划

    第一次接触到分数规划,没想到做题的时候难点不在这上头,反而在如何分数规划后,怎么用建立网络,我承认,做不来,建图是在网上剽窃的. 建图具体做法如下: 首先在原矩阵周围再加上一圈,将原矩阵包围起来,对于 ...

  8. 【bzoj1486】[HNOI2009]最小圈 分数规划+Spfa

    题目描述 样例输入 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 样例输出 3.66666667 题解 分数规划+Spfa判负环 二分答案mid,并将所有边权减去mid,然后再判 ...

  9. BZOJ 4819 Luogu P3705 [SDOI2017]新生舞会 (最大费用最大流、二分、分数规划)

    现在怎么做的题都这么水了.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4819 (luogu) https://ww ...

最新文章

  1. 使用ajax追加样式没,ajax-动态添加内容后,jQuery Mobile不应用样式
  2. 人工智能之机器学习算法体系汇总
  3. 交叉编译 FLTK1.3.0
  4. php redis事务回滚,【Redis】Redis事务详解,Redis事务不支持回滚吗?
  5. [转载] Java之嵌套接口
  6. “一天搞懂深度学习”笔记
  7. 青岛理工大学转专业到计算机难不难,2021年青岛理工大学大一新生转专业及入学考试相关规定...
  8. Docker与微服务实战(入门)
  9. 《梦幻西游H5》L inux搭建游戏服务器!
  10. 服务器被挖矿入侵,进程 command为ld-linux-x86-64占用cpu很高,解决经历
  11. lpop 原子_Matter:碳载单原子催化剂用于能量转化和存储的最新进展 – 材料牛...
  12. 初识IndexedDB本地存储
  13. Windows服务被360清理问题
  14. 街道社区网格化信息管理Echarts集成百度地图bmap样式表冲突导致的无法显示地图的解决方案
  15. 关于主板PCIE对硬盘速度影响的思考(B450F)
  16. Android Studio 崩溃没有Log信息提示
  17. matlab绘制线性回归_如何在Excel中绘制线性校准曲线
  18. python实现单机斗地主_Python编写斗地主游戏(单机版)
  19. 昨日看见小学生上学,想起我的学生时代
  20. 养老院IPTV数字电视系统方案-养老公寓康养社区IPTV电视系统建设指南

热门文章

  1. ftp 501错误_分享,HTTP协议错误代码大全
  2. vb html ie弹出窗口,VB6 统制IE弹出模式窗口
  3. 基于椭圆-最大边缘准则学习的小麦叶片病害及其严重程度识别
  4. 一种基于SE-Inception的茄科疾病识别模型
  5. LeNet卷积神经网络
  6. 扫地机自动回充揭秘之小米/iRobot/云鲸/360
  7. python--xlrd: xlrd.open_workbook excel.xls CompDocError解决办法
  8. react 显示当前时间_React 灵魂 23 问,你能答对几个?
  9. qt qtableview mysql_Qt数据库编程中QTableView使用方法
  10. python list函数使用总结_python——list总结