题面戳我
不想放题面了。。。

sol

首先还是费用流建模,建模方式参见【网络流24题20】深海机器人问题。这题的题解我还没有写。。。
针对输出方案:在残余网络上搞一搞可以求得每个位置\((x,y)\)被经过的次数。然后做k(探测车的数量)次,每次从\((1,1)\)沿着一条剩余次数大于0的路径跑到\((n,m)\),把经过的点上面的次数全部减一。这样走肯定是对的。

code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int inf = 1e9;
const int N = 40;
struct edge{int to,next,cap,w,cost;}a[N*N<<5];
int k,n,m,num,s,t,mmp[N][N],P[N][N],head[2*N*N],cnt=1,dis[2*N*N],vis[2*N*N],pe[2*N*N],tot[N][N];
queue<int>Q;
int gi()
{int x=0,w=1;char ch=getchar();while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();if (ch=='-') w=0,ch=getchar();while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return w?x:-x;
}
void link(int u,int v,int w,int cost)
{a[++cnt]=(edge){v,head[u],w,w,cost};head[u]=cnt;a[++cnt]=(edge){u,head[v],0,0,-cost};head[v]=cnt;
}
bool spfa()
{memset(dis,63,sizeof(dis));dis[s]=0;Q.push(s);while (!Q.empty()){int u=Q.front();Q.pop();for (int e=head[u];e;e=a[e].next){int v=a[e].to;if (a[e].w&&dis[v]>dis[u]+a[e].cost){dis[v]=dis[u]+a[e].cost;pe[v]=e;if (!vis[v]) vis[v]=1,Q.push(v);}}vis[u]=0;}if (dis[t]==dis[0]) return false;int sum=inf;for (int i=t;i!=s;i=a[pe[i]^1].to)sum=min(sum,a[pe[i]].w);for (int i=t;i!=s;i=a[pe[i]^1].to)a[pe[i]].w-=sum,a[pe[i]^1].w+=sum;return true;
}
int main()
{k=gi();m=gi();n=gi();for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){mmp[i][j]=gi();P[i][j]=++num;}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){if (mmp[i][j]==2)link(P[i][j],P[i][j]+num,1,-1);if (mmp[i][j]!=1)link(P[i][j],P[i][j]+num,inf,0);if (i<n)link(P[i][j]+num,P[i+1][j],inf,0);if (j<m)link(P[i][j]+num,P[i][j+1],inf,0);}s=num*2+1;link(s,P[1][1],k,0);t=s+1;link(P[n][m]+num,t,k,0);while (spfa());for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)for (int e=head[P[i][j]];e;e=a[e].next)if (a[e].to==P[i][j]+num)tot[i][j]+=a[e].cap-a[e].w;for (int t=1;t<=k;t++){int x=1,y=1;while (x!=n||y!=m){if (tot[x][y+1])++y,--tot[x][y],printf("%d 1\n",t);else++x,--tot[x][y],printf("%d 0\n",t);}}return 0;
}

转载于:https://www.cnblogs.com/zhoushuyu/p/8191878.html

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

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

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

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

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

  3. cwl的网络流24题练习

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

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

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

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

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

  6. [网络流24题] 最长递增子序列

    [网络流24题] 最长递增子序列 «问题描述: 给定正整数序列x1,..., xn. (1)计算其最长递增子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的递增子序列. (3)如果允 ...

  7. 「网络流24题」 12. 软件补丁问题

    「网络流24题」 12. 软件补丁问题 状压 DP,SPFA 转移. 没错,跟网络流没任何关系. b1.b2.f1.f2 都用二进制存下来,第 i 位表示是否有这个错误. 然后从每位都是 1 到 0 ...

  8. loj #6226. 「网络流 24 题」骑士共存问题

    #6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些 ...

  9. 【线性规划与网络流24题】孤岛营救问题 分层图

    孤岛营救问题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 1944年,特种兵麦克接到国防部的命令.要求马上赶赴太平洋上的一个孤岛,营救被敌军 ...

  10. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

最新文章

  1. npoi导出execl源码,vs2008实现,包括using库
  2. 如何给女朋友解释什么是“元宇宙”?
  3. Hibernate搭建开发环境+简单实例(二)
  4. 删除文件中指定的一行
  5. Windows 7的使用技巧或功能经典20条
  6. python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
  7. 严选前端全栈工程师学习笔记
  8. linux学习教程(一)(安装篇)centos7没有安装ifconfig命令的解决方法
  9. 16进制的两位数转换不了 matlab_跟小黑学漏洞利用开发之16进制字符转换
  10. 前端学习(1767):前端调试值之内存监控的原理和方法二
  11. java创建对象过七夕,想 new 个对象过七夕,她却抛了异常
  12. http协议与服务器通信,iPhone应用用HTTP协议和服务器通信
  13. 关于Cocos2d-x随机数的生成
  14. 79. 基于 PHP 的用户认证
  15. 计算机网络体系结构作业题整理-第一章答案
  16. websocket实时聊天(一)
  17. Windows XP 禁用屏幕保护功能
  18. android 比较全的android 源码合集 + 企业级应用分享,从业的积累(毕业设计集合版)
  19. 人体计算机原理,人体静力学
  20. bigdecimal负数变正数_Java中BigDecimal的8种舍入模式

热门文章

  1. StarRocks 极客营 | 王天宜:把 Usability 当产品来开发,愿运维把 StarRocks 用得飘逸
  2. 一张图快速了解23种设计模式
  3. 计算每年的母亲节日期-C语言代码
  4. Android:异步处理之Handler+Thread的应用(一)
  5. 数字计算机如何分类 依据是什么,计算机如何分类?
  6. 问佛 (佛是過來人,人是未來佛)
  7. java将小写的日期转换为大写的日期
  8. TypeScript等无法获取到歌曲播放的位置信息时,关于歌曲的续播
  9. Excel如何来绘制不同函数的图像;不同数学符号可以在word中打处理;
  10. UEFI应用与编程--Dump ALC662 Verb Table