题目传送门

题目大意: 有一张 n×mn\times mn×m 的网格图,要从左上角往右下角走 kkk 次,只能向下或向右走,000 表示地板(即能走),111 表示障碍(即不能走),222 表示地板上有石头,现在要求收集尽可能多的石头,给出走的方案。

题解

把石头看成费用,那么这就是一个最大费用最大流了。

由于每个石头只能捡 111 次,所以每个格子需要拆点,中间连一条流量为 111,费用为 111 的边,然后因为这个格子就算没有石头也能走,所以还需要连一条流量无限,费用为 000 的边。

然后相邻的格子连一条流量无限,费用为 000 的边即可。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 10010
#define inf 999999999int n,m,k,a[40][40];
struct edge{int x,y,z,cost,next;};
edge e[maxn<<1];
int first[maxn],len=1;
void buildroad(int x,int y,int z,int cost)
{e[++len]=(edge){x,y,z,cost,first[x]};first[x]=len;
}
int f1[2]={0,1},f2[2]={1,0};
int pos(int x,int y){return (x-1)*m+y;}
int q[maxn],st,ed,f[maxn],fa[maxn];
bool v[maxn];
bool SPFA()
{for(int i=1;i<=2*n*m;i++)f[i]=-inf;memset(fa,0,sizeof(fa));st=1;ed=2;q[st]=1;v[1]=true;f[1]=0;while(st!=ed){int x=q[st++];st=st>2*n*m?1:st;v[x]=false;for(int i=first[x];i;i=e[i].next){int y=e[i].y;if(e[i].z&&f[y]<f[x]+e[i].cost){f[y]=f[x]+e[i].cost;fa[y]=i;if(!v[y])v[q[ed++]=y]=true,ed=ed>2*n*m?1:ed;}}}return fa[2*n*m];
}
void go(int x,int now)
{if(x==2*n*m)return;for(int i=first[x];i;i=e[i].next)//printf("%d %d %d\n",e[i].x,e[i].y,e[i].z);if(e[i].z!=inf&&e[i].z>10){printf("%d %d\n",now,((x-1)%m)<((e[i].y-1)%m));e[i].z++; go(e[i].y+n*m,now);break;}
}int main()
{scanf("%d %d %d",&k,&m,&n);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;i++)for(int j=1;j<=m;j++)if(a[i][j]!=1){if(a[i][j]==2)buildroad(pos(i,j),pos(i,j)+n*m,1,1),buildroad(pos(i,j),pos(i,j)+n*m,0,-1);buildroad(pos(i,j),pos(i,j)+n*m,inf,0);buildroad(pos(i,j),pos(i,j)+n*m,0,0);for(int k=0;k<2;k++){int x=i+f1[k],y=j+f2[k];if(x>n||y>m||a[x][y]==1)continue;buildroad(pos(i,j)+n*m,pos(x,y),inf,0);buildroad(pos(x,y),pos(i,j)+n*m,0,0);}}for(int j=1;j<=k;j++){SPFA();for(int i=fa[2*n*m];i;i=fa[e[i].x])e[i].z--,e[i^1].z++;}for(int i=1;i<=k;i++)go(1+n*m,i);
}

【网络流24题】火星探险问题 题解相关推荐

  1. 【题解】网络流24题一句话题解集合

    最近写了下<线性规划与网络流24题>,发下代码和题解,事实上就是将交给cycycy的题解复制一下 T1 飞行员配对方案问题 solution 裸的匈牙利 code #include< ...

  2. 题解 【网络流24题】太空飞行计划

    [网络流24题]太空飞行计划 Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,- ...

  3. 解题报告:线性规划与网络流24题

    目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...

  4. 「网络流24题」 题目列表

    「网络流24题」 题目列表 序号 题目标题 模型 题解 1 飞行员配对方案问题 二分图最大匹配 <1> 2 太空飞行计划问题 最大权闭合子图 <2> 3 最小路径覆盖问题 二分 ...

  5. 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)

    ------------------------------------------------------------------------------------ 17/24 --------- ...

  6. cwl的网络流24题练习

    网络流24题 编号 题目 备注 1 飞行员配对方案问题 二分图最大匹配,可最大流解决 2 太空飞行计划问题   3 最小路径覆盖问题  有向图最小路径覆盖,解法都写题目上了 4 魔术球问题  有向图最 ...

  7. 【线性规划与网络流24题】汽车加油行驶问题 分层图

    汽车加油行驶问题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 给定一个 N*N的方形网格,设其左上角为起点◎,坐标为( 1,1),X轴向右为 ...

  8. 【网络流24题】魔术球问题(最大流)

    [网络流24题]魔术球问题(最大流) 题面 Cogs 题解 是不是像极了最小路径覆盖? 因此,我们枚举放到哪一个球(也可以二分) 然后类似于最小路径覆盖的连边 因为一根柱子对应一个路径的覆盖 所以,提 ...

  9. [ZJOI2010]网络扩容[网络流24题]

    [ZJOI2010]网络扩容[网络流24题] 题意: 给定一张有向图,每条边都有一个容量 c 和一个扩容费用 w.这里扩容费用是指将容量扩大 1 所需的费用.求: 在不扩容的情况下,1 到 n 的最大 ...

  10. P2756 飞行员配对方案问题【网络流24题】

    P2756 飞行员配对方案问题 文章目录 题目背景 题解: 代码: 题目背景 第二次世界大战期间,英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相 ...

最新文章

  1. tiny-cnn执行过程分析(MNIST)
  2. Java项目:校园招聘平台系统(java+MySQL+Jdbc+Servlet+SpringMvc+Jsp)
  3. qpsk调制解调matlab_本科毕业设计课题—QPSK相干解调的MATLAB仿真(3)
  4. Keep Moving blog改版
  5. 怎样将outlook express中的邮件保留在原邮箱
  6. HTML,CSS,JavaScript学习笔记--导航
  7. 转载-聊一聊深度学习的activation function
  8. Oracle DBA 经典面试题
  9. 【VS开发】文件夹和文件选择EditBrowe控件使用
  10. 微信公众平台开发(五) 天气预报功能开发
  11. 超平面是什么?——理解超平面(SVM开篇之超平面详解)
  12. 看完这个,让你分分钟搞定罗盘与加计校准!
  13. body 没有被撑开_为什么父div没有被撑开
  14. Nakagami分布
  15. 安装PS出现“由于找不到VCRUNTIME 140_1.dll”的解决方法
  16. 归并排序算法(C语言)
  17. 开源中国 开源世界2019_2019年最受欢迎的开源新闻报道
  18. ae稳定不能获取动态服务器,ae 获取动态链接服务器超时
  19. Prometheus节点失联后CPU使用率不准确
  20. 抽象代数 04.07 Jordan-Holder定理

热门文章

  1. js逆向巨潮mcode
  2. pth文件转为onnx格式
  3. Linux系统u盘win7没驱动程序,u盘安装win7找不到设备驱动程序,教您解决u盘安装win7找不到设备驱动程序...
  4. 飞机大战小游戏 C语言(课设任务)
  5. 解决 Poi读取Excle报错 java.util.zip.ZipException: invalid stored block lengths
  6. html简洁漂亮的个人简历,个人主页,个人简介网页版(源码)
  7. 黑苹果登录apple id_充分利用Apple登录功能
  8. Java游戏---俄罗斯方块
  9. 邮件发送超大附件,上传下载特别慢,怎么解决?
  10. oracle 02085,【DBLINK】“ORA-02085: database link %s connects to %s”故障排查及处理策略两则...