题面

题意

给出一张地图,上面有一些石块或障碍,现在有一些运载车从左上角出发,要去右下角,只能向右或向下走,每个石块只能收集一次,输出收集到最多石块的路径.

做法

多个运载车,不难想到是网络流,但难点在于每个石块最多收集一次,而且要收集最多石块.
可以用费用流来做,每个点拆成两个入点向出点连一条流量为INF,费用为0的边,如果该地有石块,则再连一条流量为1,费用为-1的边,最后跑费用流,再用dfs输出路径即可.

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define N 20010
#define INF 0x3f3f3f3f
#define zh(i,j) ((i-1)*n+j)
using namespace std;int n,m,k,ans,bb=1,first[N],s,t,last[N],B[N],d[N],mf,mm[40][40];
bool in[N];
struct Bn
{int to,next,quan,cst;
} bn[1001000];
queue<int>que;inline void add(int u,int v,int w,int z)
{bb++;bn[bb].to=v;bn[bb].next=first[u];bn[bb].quan=w;bn[bb].cst=z;first[u]=bb;
}inline void ad(int u,int v,int w,int z)
{
//  cout<<u<<" "<<v<<" "<<w<<" "<<z<<endl;add(u,v,w,z);add(v,u,0,-z);
}inline bool bfs()
{int p,q,mn=INF;for(; !que.empty(); que.pop());memset(d,0x3f,sizeof(d));que.push(s);d[s]=0;for(; !que.empty();){q=que.front();que.pop();in[q]=0;for(p=first[q]; p!=-1; p=bn[p].next){if(d[bn[p].to]>d[q]+bn[p].cst&&bn[p].quan){d[bn[p].to]=d[q]+bn[p].cst;last[bn[p].to]=q;B[bn[p].to]=p;if(!in[bn[p].to]){in[bn[p].to]=1;que.push(bn[p].to);}}}}if(d[t]==INF) return 0;for(p=t; p!=s; p=last[p]){mn=min(mn,bn[B[p]].quan);}ans+=mn*d[t];mf+=mn;for(p=t; p!=s; p=last[p]){bn[B[p]].quan-=mn;bn[B[p]^1].quan+=mn;}return 1;
}void df(int now,int u)
{if(now==2*m*n) return;int p,q;for(p=first[now];p!=-1;p=bn[p].next){if(bn[p].quan!=INF&&bn[p].quan>100){bn[p].quan++;printf("%d %d\n",u,(now-1)%n<(bn[p].to-1)%n);df(bn[p].to+m*n,u);return;}}
}int main()
{memset(first,-1,sizeof(first));int i,j,p,q,o,z;cin>>p>>n>>m;ad(s,1,p,0);t=2*m*n;for(i=1;i<=m;i++){for(j=1;j<=n;j++){scanf("%d",&mm[i][j]);ad(zh(i,j),zh(i,j)+m*n,1,-(mm[i][j]==2));ad(zh(i,j),zh(i,j)+m*n,INF,0);}}for(i=1;i<=m;i++){for(j=1;j<=n;j++){if(i<m&&mm[i+1][j]!=1) ad(zh(i,j)+m*n,zh(i+1,j),INF,0);if(j<n&&mm[i][j+1]!=1) ad(zh(i,j)+m*n,zh(i,j+1),INF,0);}}for(; bfs(););
//  cout<<mf<<" "<<ans;
//  return 0;for(i=1;i<=p;i++){df(1+m*n,i);}
}

洛谷 P3356 火星探险问题相关推荐

  1. 洛谷 - P3356 火星探险问题(最大费用最大流+拆点+路径打印)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,每个点都有一个数字: 0:平坦无障碍 1:障碍 2:石块 现在在点(1,1)处有k个探测车,他们都要去往点(n,m)处,探测车只能向下或向右行驶,现 ...

  2. P3356 火星探险问题(网络流)

    P3356 火星探险问题 对于一个第一次经过会有价值,但是之后经过没有价值的点,我们的处理方法就是只连一条流量为1并且有费用的边,再连接流量为INF但是没有费用的边,这样我们要使得价值最大就会优先流有 ...

  3. 【Luogu】P3356火星探险问题(费用流)

    题目链接 网络流一条边都不能多连?没道理呀? 不过单看这题的确是个sb题-- #include<cstdio> #include<algorithm> #include< ...

  4. 洛谷——网络流24题

    P2756 飞行员配对方案问题 P2762 太空飞行计划问题 P4014 分配问题 P2774 方格取数问题 P4009 汽车加油行驶问题 P4015 运输问题 P3254 圆桌问题 P2763 试题 ...

  5. 洛谷题单 算法1-3 暴力枚举

    1 First Step (ファーストステップ) 题目背景 知らないことばかりなにもかもが(どうしたらいいの?) 一切的一切 尽是充满了未知数(该如何是好) それでも期待で足が軽いよ(ジャンプだ!) ...

  6. 2021寒假——洛谷刷题计划(35题)

    (希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...

  7. 洛谷P1088.火星人【模拟/搜索/康托展开】

    洛谷P1088.火星人[模拟/搜索/康托展开] 题干 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题意 思路一--模拟 分析 上代码 思路二--搜索 分析 上代码 思路三--变进制数与康托 ...

  8. 洛谷1088 火星人

    洛谷1088 火星人 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法.这种交流方法是这样的,首先,火星人把一个非 ...

  9. 洛谷刷题:火星人、奖学金、纪念品分组、统计数字、字符串的展开

    好久没写洛谷了,不优雅的代码又来啦~ [NOIP2004 普及组] 火星人 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字 ...

  10. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

最新文章

  1. android xutils3.0获取服务器图片,Android端使用xUtils3.0实现文件上传
  2. Vim快捷输出查找寄存器的内容(去除\,\和\V)
  3. 设计模式理解:观察者模式
  4. 【教程】把PPT转WORD形式的方法
  5. bond4 交换机配置_Linux--多网卡的7种Bond模式和交换机配置
  6. 机器学习入门——多项式回归
  7. 解决电脑屏幕显示器亮度无法调节可能与远程工具向日葵有关
  8. Android开发:apk反编译及后续打包教程2022win11(亲测)
  9. 非线性微分方程的线性化
  10. Vmware workstation 16pro解锁装MacOS
  11. Excel知道身份证号码怎么快速提取出年龄
  12. qtablewidget 添加一行
  13. 51系列单片机寻址方式
  14. word制作表格详细教程
  15. 计算风险指标:最大回撤、计算风险收益指标:夏普比率、利用最大回撤和夏普比筛选基金、比较3只股票的夏普指数
  16. PostMan测试接口,出现415报错,Unsupported Media Type
  17. python官网-python中文官网
  18. 一个月瘦10斤的计划
  19. 回顾知识点:操作系统篇(二)
  20. java 常用的加密算法及分类

热门文章

  1. 第二章 计算机系统和计算机组成原理
  2. 什么是搜索引擎???搜索引擎的介绍
  3. 网页加速之Link prefetching
  4. Pytorch加载.pth文件
  5. Hive Privilege 分析
  6. mybatis与spring结合
  7. 贝塔自助授权系统php源码,贝塔自助授权系统v1.1
  8. Nginx跳转到用户首页
  9. torch.nn.Embedding(num_embeddings, embedding_dim)的理解
  10. vbs打开网页并全屏