[洛谷P4012] [网络流24题] 深海机器人问题
Description###
深海资源考察探险队的潜艇将到达深海的海底进行科学考察。
潜艇内有多个深海机器人。潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动。
深海机器人在移动中还必须沿途采集海底生物标本。沿途生物标本由最先遇到它的深海机器人完成采集。
每条预定路径上的生物标本的价值是已知的,而且生物标本只能被采集一次。
本题限定深海机器人只能从其出发位置沿着向北或向东的方向移动,而且多个深海机器人可以在同一时间占据同一位置。
用一个 P×Q 网格表示深海机器人的可移动位置。西南角的坐标为(0,0) ,东北角的坐标为(Q,P) 。

给定每个深海机器人的出发位置和目标位置,以及每条网格边上生物标本的价值。
计算深海机器人的最优移动方案, 使深海机器人到达目的地后,采集到的生物标本的总价值最高。
Input###
文件的第 11 行为深海机器人的出发位置数 a ,和目的地数 b 。
第 22 行为 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行输入时横纵坐标要反过来
Output###
输出采集到的生物标本的最高总价值.
Sample Input###
1 1
2 2
1 2
3 4
5 6
7 2
8 10
9 3
2 0 0
2 2 2
Sample Output###
42
HINT###
1≤P,Q≤15
1≤a≤4
1≤b≤6
想法##
还是挺容易的一道题
直接按题目所说的建图,每相邻两个点间连两条边
一条容量为1,代价为-val
另一条容量为INF,代价为0
跑一遍最小费用最大流,答案\(\times\)-1就行了
代码##
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#define INF 2000000000
using namespace std;
typedef long long ll;
const int N = 17;
const int M = N*N;
struct node{
int v,f,c;
node *next,*rev;
}pool[M*8+20],*h[M],*pree[M];
int cnt;
void addedge(int u,int v,int f,int c){
node *p=&pool[++cnt],*q=&pool[++cnt];
p->v=v;p->next=h[u];h[u]=p; p->f=f;p->c=c;p->rev=q;
q->v=u;q->next=h[v];h[v]=q; q->f=0;q->c=-c;q->rev=p;
}
int S,T;
ll d[M];
int vis[M],pre[M];
queue<int> que;
bool spfa(){
int u,v;
while(!que.empty()) que.pop();
for(int i=S;i<=T;i++) d[i]=INF;
d[S]=0; vis[S]=1;
que.push(S);
while(!que.empty()){
u=que.front(); que.pop();
vis[u]=0;
for(node *p=h[u];p;p=p->next)
if(p->f && d[v=p->v]>d[u]+p->c){
d[v]=d[u]+p->c;
pre[v]=u;
pree[v]=p;
if(!vis[v]) { que.push(v); vis[v]=1; }
}
}
return d[T]!=INF;
}
void cal(ll &f,ll &c){
int u=T,w=INF;
node *p=pree[u];
while(u!=S){
w=min(w,p->f);
u=pre[u]; p=pree[u];
}
f+=w; c+=w*d[T];
u=T; p=pree[u];
while(u!=S){
p->f-=w;
p->rev->f+=w;
u=pre[u]; p=pree[u];
}
}
ll MCMF(){
ll f=0,c=0;
while(spfa()) cal(f,c);
return c;
}
int a,b,n,m;
int main()
{
scanf("%d%d%d%d",&a,&b,&n,&m);
n++;m++;
S=0; T=n*m+1;
int x,y,k;
for(int i=1;i<=n;i++)
for(int j=1;j<m;j++) {
scanf("%d",&x);
addedge((i-1)*m+j,(i-1)*m+j+1,1,-x);
addedge((i-1)*m+j,(i-1)*m+j+1,INF,0);
}
for(int j=1;j<=m;j++)
for(int i=1;i<n;i++) {
scanf("%d",&x);
addedge((i-1)*m+j,i*m+j,1,-x);
addedge((i-1)*m+j,i*m+j,INF,0);
}
for(int i=0;i<a;i++){
scanf("%d%d%d",&k,&x,&y);
x++;y++;
addedge(S,(x-1)*m+y,k,0);
}
for(int i=0;i<b;i++){
scanf("%d%d%d",&k,&x,&y);
x++;y++;
addedge((x-1)*m+y,T,k,0);
}
printf("%lld\n",-MCMF());
return 0;
}
[洛谷P4012] [网络流24题] 深海机器人问题的更多相关文章
- [洛谷P3254] [网络流24题] 圆桌游戏
Description 假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为ri (i =1,2,--,m). 会议餐厅共有n 张餐桌,每张餐桌可容纳ci (i =1,2,--,n) ...
- 洛谷 P4012 深海机器人问题【费用流】
题目链接:https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海机器人问题 输入输出样例 输入样例#1: 1 1 2 2 1 2 3 4 5 6 ...
- 洛谷P4009汽车加油行驶问题——网络流24题(最短路)
题目:https://www.luogu.org/problemnew/show/P4009 网络流24题中不是网络流的最短路题: 把每个点拆成各个油量上的点,根据要求连边即可: 注意:点数最大为10 ...
- [网络流24题] 洛谷P2761 软件补丁问题
题意:某公司发现其研制的一个软件中有 n个错误,随即为该软件发放了一批共 m 个补丁程序.对于每一个补丁 i ,都有 2 个与之相应的错误集合 B1(i)和 B2(i),使得仅当软件包含 B1(i)中 ...
- 网络流24题 gay题报告
洛谷上面有一整套题. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 extra ①飞行员配对方案问题.top 裸二分图匹 ...
- 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...
- 【网络流24题】最长k可重线段集(费用流)
[网络流24题]最长k可重线段集(费用流) 题面 Cogs的数据有问题 Loj 洛谷 题解 这道题和最长k可重区间集没有区别 只不过费用额外计算一下 但是,还是有一点要注意的地方 这里可以是一条垂直的 ...
- 【网络流24题】最长k可重区间集(费用流)
[网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...
- 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)
------------------------------------------------------------------------------------ 17/24 --------- ...
随机推荐
- H3C生成树协议
- vue-learning:1 - 为什么选择vue
为什么选择Vue 通过一个对比,展示vue框架的优势: 需求:根据请求后端接口返回的数据列表,渲染在页面中. 传统上我们使用jQuery的Ajax发送http请求,获取数据.判断列表数据是否存在,如果 ...
- es6笔记 day3---Promise
作用:解决异步回调问题 先知道它的大概语法就好了,这个东西需要平时用到才知道它的用处 语法: let promise= new Promise(function(resolve,reject){ // ...
- 如何删除Word自动编号后文字和编号之间的空白距离
一.出现的现象:使用word进行自动编号之后,编号和其后的文字出现如下图所示的空白 二.如何解决问题 选中列表内容右键->调整列表缩进->选择“编号之后(W)"为不特别标注-&g ...
- WebGPU学习(十一):学习两个优化:“reuse render command buffer”和“dynamic uniform buffer offset”
大家好,本文介绍了"reuse render command buffer"和"dynamic uniform buffer offset"这两个优化,以及Ch ...
- 2019 ICPC南昌网络赛 B题
英雄灭火问题忽略了一点丫 一个超级源点的事情,需要考虑周全丫 2 #include<cstdio> #include<cstring> #include<queue> ...
- 安装ATS(apache traffic server)正向代理
一 traffic server简介 Traffic Server是一种高性能Web代理缓存,可通过在网络边缘缓存频繁访问的信息来提高网络效率和性能.这使内容在物理上更接近最终用户,同时实现更快的交付 ...
- vue学习笔记(六)表单输入绑定
前言 在上一章vue学习笔记(四)事件处理器这一篇博客的内容中,我们已经了解vue是如何绑定事件的,而本篇博客主要讲解的是vue中表单输入的绑定,通常我们自己提交信息的时候都是通过表单将信息到服务器的 ...
- Redis 中的数据持久化策略(RDB)
Redis 是一个内存数据库,所有的数据都直接保存在内存中,那么,一旦 Redis 进程异常退出,或服务器本身异常宕机,我们存储在 Redis 中的数据就凭空消失,再也找不到了. Redis 作为一个 ...
- 1059 C语言竞赛 (20 分)C语言
C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0.冠军将赢得一份"神秘大奖"(比如很巨大的一本学生研究论文集--). 1 ...