题目描述

深海资源考察探险队的潜艇将到达深海的海底进行科学考察。

潜艇内有多个深海机器人。潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动。

深海机器人在移动中还必须沿途采集海底生物标本。沿途生物标本由最先遇到它的深海机器人完成采集。

每条预定路径上的生物标本的价值是已知的,而且生物标本只能被采集一次。

本题限定深海机器人只能从其出发位置沿着向北或向东的方向移动,而且多个深海机器人可以在同一时间占据同一位置。

用一个P×Q 网格表示深海机器人的可移动位置。西南角的坐标为 (0,0),东北角的坐标为 (Q,P) 。

给定每个深海机器人的出发位置和目标位置,以及每条网格边上生物标本的价值。

计算深海机器人的最优移动方案, 使深海机器人到达目的地后,采集到的生物标本的总价值最高。

输入输出格式

输入格式:

文件的第 1 行为深海机器人的出发位置数 a,和目的地数 b 。

第 2 行为 P 和 Q 的值。

接下来的 P+1 行,每行有 Q 个正整数,表示向东移动路径上生物标本的价值,行数据依从南到北方向排列。

再接下来的 Q+1 行,每行有 P 个正整数,表示向北移动路径上生物标本的价值,行数据依从西到东方向排列。

接下来的 a 行,每行有 3 个正整数 k,x,y,表示有 k 个深海机器人从 (x,y)位置坐标出发。

再接下来的 b 行,每行有 3 个正整数 r,x,y ,表示有 r 个深海机器人可选择 (x,y)位置坐标作为目的地。

a行和b行输入时横纵坐标要反过来

输出格式:

输出采集到的生物标本的最高总价值.

解题思路:

输入喷我一脸。

在边界建两条流,一条流量为1有费用,一条为0无费用

代码:

  1 #include<queue>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 const int oo=0x3f3f3f3f;
  6 struct pnt{
  7     int hd;
  8     int pre;
  9     int lst;
 10     int dis;
 11     int val;
 12     bool vis;
 13 }p[100000];
 14 struct ent{
 15     int twd;
 16     int lst;
 17     int vls;
 18     int dis;
 19 }e[1000000];
 20 int cnt;
 21 int n,m;
 22 int s,t;
 23 int ns,nt;
 24 int no[101][101];
 25 std::queue<int>Q;
 26 void ade(int f,int t,int v,int d)
 27 {
 28     cnt++;
 29     e[cnt].twd=t;
 30     e[cnt].vls=v;
 31     e[cnt].dis=d;
 32     e[cnt].lst=p[f].hd;
 33     p[f].hd=cnt;
 34     return ;
 35 }
 36 bool Spfa(void)
 37 {
 38     for(int i=1;i<=t;i++)
 39     {
 40         p[i].dis=p[i].val=oo;
 41         p[i].vis=false;
 42     }
 43     p[t].pre=-1;
 44     p[s].dis=0;
 45     p[s].vis=true;
 46     while(!Q.empty())
 47         Q.pop();
 48     Q.push(s);
 49     while(!Q.empty())
 50     {
 51         int x=Q.front();
 52         Q.pop();
 53         p[x].vis=false;
 54         for(int i=p[x].hd;i;i=e[i].lst)
 55         {
 56             int to=e[i].twd;
 57             if(p[to].dis>p[x].dis+e[i].dis&&e[i].vls>0)
 58             {
 59                 p[to].dis=p[x].dis+e[i].dis;
 60                 p[to].val=std::min(p[x].val,e[i].vls);
 61                 p[to].pre=x;
 62                 p[to].lst=i;
 63                 if(p[to].vis)
 64                     continue;
 65                 p[to].vis=true;
 66                 Q.push(to);
 67             }
 68         }
 69     }
 70     return p[t].pre!=-1;
 71 }
 72 int Ek(void)
 73 {
 74     int ans=0;
 75     while(Spfa())
 76     {
 77         ans+=p[t].dis*p[t].val;
 78         for(int i=t;i!=s;i=p[i].pre)
 79         {
 80             e[p[i].lst].vls-=p[t].val;
 81             e[((p[i].lst-1)^1)+1].vls+=p[t].val;
 82         }
 83     }
 84     return ans;
 85 }
 86 int main()
 87 {
 88 //    freopen("a.in","r",stdin);
 89     scanf("%d%d",&ns,&nt);
 90     scanf("%d%d",&n,&m);
 91     for(int i=0;i<=n;i++)
 92         for(int j=0;j<=m;j++)
 93             no[i][j]=++cnt;
 94     s=cnt+1;
 95     t=cnt+2;
 96     cnt=0;
 97     for(int i=0;i<=n;i++)
 98     {
 99         for(int j=0;j<m;j++)
100         {
101             int x;
102             scanf("%d",&x);
103             ade(no[i][j],no[i][j+1],1,-x);
104             ade(no[i][j+1],no[i][j],0,x);
105             ade(no[i][j],no[i][j+1],oo,0);
106             ade(no[i][j+1],no[i][j],0,0);
107         }
108     }
109     for(int j=0;j<=m;j++)
110     {
111         for(int i=0;i<n;i++)
112         {
113             int x;
114             scanf("%d",&x);
115             ade(no[i][j],no[i+1][j],1,-x);
116             ade(no[i+1][j],no[i][j],0,x);
117             ade(no[i][j],no[i+1][j],oo,0);
118             ade(no[i+1][j],no[i][j],0,0);
119         }
120     }
121     for(int i=1;i<=ns;i++)
122     {
123         int a,b,c;
124         scanf("%d%d%d",&c,&a,&b);
125         ade(s,no[a][b],c,0);
126         ade(no[a][b],s,0,0);
127     }
128     for(int i=1;i<=nt;i++)
129     {
130         int a,b,c;
131         scanf("%d%d%d",&c,&a,&b);
132         ade(no[a][b],t,c,0);
133         ade(t,no[a][b],0,0);
134     }
135     printf("%d\n",-Ek());
136     return 0;
137 }

转载于:https://www.cnblogs.com/blog-Dr-J/p/10210827.html

LuoguP4012 深海机器人问题(费用流)相关推荐

  1. 【图论】【网络流】费用流模型

    费用流模型 费用流板子 费用流直接应用 运输问题 负载平衡问题 二分图最大匹配 分配问题 最大权不相交路径 数字梯形问题 费用流网格图模型 K取方格数 深海机器人问题 费用流拆点 餐巾计划问题 费用流 ...

  2. 洛谷 P4012 深海机器人问题【费用流】

    题目链接:https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海机器人问题 输入输出样例 输入样例#1: 1 1 2 2 1 2 3 4 5 6 ...

  3. [洛谷P4012] [网络流24题] 深海机器人问题

    Description 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生 ...

  4. [BZOJ 1221][HNOI2001]软件开发(费用流)

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  5. 费用流 -- 四川省赛F-Direction Setting [拆边成点+费用流]

    题目链接 题目大意: 就是给你一个nnn个点mmm条边的无向图,每个点有个值是aia_iai​现在你把每条边都赋予一个方向之后这个图就是有向图了,那么设第iii个点的入度是did_idi​,现在设 D ...

  6. UVA1411 Ants(带权二分图的最大完美匹配、zkw费用流)

    题解 给定一些黑点白点,要求一个黑点链接一个白点并且线段不相交(转成二分图最大权匹配使用费用流解决)<训练指南>P351 输出方案:满流即为答案(满流是指这条路的流量跑满了,也就是说edg ...

  7. 餐巾计划问题 线性规划与网络流24题之10 费用流

    相关知识:最小费用(最大)流 问题描述: 一个餐厅在相继的N 天里, 每天需用的餐巾数不尽相同. 假设第i天需要ri块餐巾(i=1, 2,-,N).餐厅可以购买新的餐巾,每块餐巾的费用为p分:或者把旧 ...

  8. BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...

  9. bzoj3171: [Tjoi2013]循环格(费用流)

    传送门 其实这题的建图并不难(虽然我并没有想出来) 首先,每一个点的入度和出度必须为$1$ 那么我们考虑拆点 每个点的出度点向它能到达的点的入度点连边,容量$1$,如果方向为原来的方向则费用$0$否则 ...

  10. 洛谷 - P2045 - 方格取数加强版 - 费用流

    原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...

最新文章

  1. ubuntu下使用Eclipse下搭建c开发环境
  2. 芯片短缺加剧,上半年汽车销量逆势上涨的丰田也扛不住了,9月减产40%
  3. HTML5中的CSS Shader技术
  4. Spring Security——基于读写锁的动态权限配置FilterInvocationSecurityMetadataSource实现类
  5. jQuery 判断元素是否在屏幕可见区域内
  6. apache安全—用户访问控制
  7. java jar 源码乱码,java使用jar包时出现乱码的解决方法
  8. gcc编译流程及中间表示层RTL的探索
  9. LeetCode 1216. 验证回文字符串 III(DP)
  10. mysql 游标中实现递归_mysql中实现递归查询?
  11. 漫话:是时候说说到底什么是 IPv4 和 IPv6 了!
  12. visio网络拓扑图 下载_Visio2019软件下载及安装教程
  13. Linux系统多网卡环境下的路由配置
  14. 华硕主板开机:loading asus express gate解决办法
  15. 2022年聚合工艺特种作业证考试题库及在线模拟考试
  16. 软考软件设计师-软件工程基础知识
  17. 年薪50万的程序员_2018年这类程序员工资最高!年薪50万只能算一般
  18. 自定义智能报表系统内容准备:基于WEB的SBO数据结构浏览器
  19. 我的大学-5-34-林陆
  20. C++源文件到可执行程序

热门文章

  1. 拓端tecdat|R语言股市可视化相关矩阵:最小生成树
  2. 【大数据部落】文本挖掘:twitter推特LDA主题情感分析
  3. 永久更改打开matlab时工作目录
  4. python sdk怎么用_python - alipay sdk 使用 及 注意点
  5. java日历制作日期不对_在我的代码中,为什么Java日期或日历中的月份日期不同? - java...
  6. pandas如何往mysql追加数据
  7. 神经网络入门学习-一些基本的概念+不含隐层
  8. sublimeText3安装、激活、环境配置与代码补全神器Kite安装配置
  9. python实现完整的特征工程,实践论文中的分类模型和方法用于恶意页面的分类与识别
  10. vs中能编译通过,但是会有红色下划线提示未定义标示符问题