洛谷P4012 深海机器人问题(费用流)
图给的好坑……还得倒过来……
用大佬的图做个示范
我们考虑左图吧
把每一个点向下连边,容量$1$,费用为给出的价值(表示一个机器人可以过去取得标本)
再连一条边,容量$inf$,费用$0$(表示剩下的机器人过去无法取得标本)
然后向右连的边也一样
注意连边的顺序
然后源点向所有出发点连边,容量为机器人数,费用$0$,所有目的地向汇点连边,容量为机器人数,费用为$0$
跑个最大费用流
- //minamoto
- #include<bits/stdc++.h>
- #define inf 0x3f3f3f3f
- #define get(i,j) (i-1)*m+j
- using namespace std;
- #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
- char buf[<<],*p1=buf,*p2=buf;
- inline int read(){
- #define num ch-'0'
- char ch;bool flag=;int res;
- while(!isdigit(ch=getc()))
- (ch=='-')&&(flag=true);
- for(res=num;isdigit(ch=getc());res=res*+num);
- (flag)&&(res=-res);
- #undef num
- return res;
- }
- const int N=,M=;
- int ver[M],edge[M],head[N],Next[M],flow[M],tot=;
- int dis[N],disf[N],vis[N],Pre[N],last[N],n,m,s,t,a,b;
- queue<int> q;
- inline void add(int u,int v,int f,int e){
- ver[++tot]=v,Next[tot]=head[u],head[u]=tot,flow[tot]=f,edge[tot]=e;
- ver[++tot]=u,Next[tot]=head[v],head[v]=tot,flow[tot]=,edge[tot]=-e;
- }
- bool spfa(){
- memset(dis,0xef,sizeof(dis));
- q.push(s),dis[s]=,disf[s]=inf,Pre[t]=-;
- while(!q.empty()){
- int u=q.front();q.pop();vis[u]=;
- for(int i=head[u];i;i=Next[i]){
- int v=ver[i];
- if(flow[i]&&dis[v]<dis[u]+edge[i]){
- dis[v]=dis[u]+edge[i],Pre[v]=u,last[v]=i;
- disf[v]=min(disf[u],flow[i]);
- if(!vis[v]) vis[v]=,q.push(v);
- }
- }
- }
- return ~Pre[t];
- }
- int dinic(){
- int maxcost=;
- while(spfa()){
- int u=t;maxcost+=disf[t]*dis[t];
- while(u!=s){
- flow[last[u]]-=disf[t];
- flow[last[u]^]+=disf[t];
- u=Pre[u];
- }
- }
- return maxcost;
- }
- int main(){
- a=read(),b=read(),n=read()+,m=read()+;
- s=,t=n*m+;
- for(int i=;i<=n;++i)
- for(int j=;j<m;++j){
- int x=read(),hh=get(i,j),tt=hh+;
- add(hh,tt,,x);
- add(hh,tt,inf,);
- }
- for(int j=;j<=m;++j)
- for(int i=;i<n;++i){
- int x=read(),hh=get(i,j),tt=hh+m;
- add(hh,tt,,x);
- add(hh,tt,inf,);
- }
- for(int i=;i<=a;++i){
- int k=read(),x=read()+,y=read()+;
- add(s,get(x,y),k,);
- }
- for(int i=;i<=b;++i){
- int k=read(),x=read()+,y=read()+;
- add(get(x,y),t,k,);
- }
- printf("%d\n",dinic());
- return ;
- }
洛谷P4012 深海机器人问题(费用流)的更多相关文章
- 洛谷P4012 深海机器人问题(费用流)
题目描述 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本.沿途生 ...
- 洛谷 P4012 深海机器人问题【费用流】
题目链接:https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海机器人问题 输入输出样例 输入样例#1: 1 1 2 2 1 2 3 4 5 6 ...
- 洛谷 P4012 深海机器人问题 【最大费用最大流】
和火星那个有点像,但是这个价值直接在路径上,不用拆点,对于每条价值为w的边(i,j),连接(i,j,1,w)(i,j,inf,0),表示价值只能取一次,然后连接源点和所有出发点(s,i,k,0),所有 ...
- LuoguP4012 深海机器人问题(费用流)
题目描述 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本.沿途生 ...
- 洛谷 1004 dp或最大费用流
思路: dp方法: 设dp[i][j][k][l]为两条没有交叉的路径分别走到(i,j)和(k,l)处最大价值. 则转移方程为 dp[i][j][k][l]=max(dp[i-1][j][k-1][l ...
- 洛谷P4003 无限之环(费用流)
传送门 神仙题啊……不看题解我可能一年都不一定做得出来……FlashHu大佬太强啦 到底是得有怎样的脑回路才能一眼看去就是费用流啊…… 建好图之后套个板子就好了,那么我们着重来讨论一下怎么建图 首先, ...
- 洛谷P3356 火星探险问题(费用流)
题目描述 火星探险队的登陆舱将在火星表面着陆,登陆舱内有多部障碍物探测车.登陆舱着陆后,探测车将离开登陆舱向先期到达的传送器方向移动.探测车在移动中还必须采集岩石标本.每一块岩石标本由最先遇到它的探测 ...
- 洛谷P2517 HAOI2010 订货 (费用流)
标准的费用流问题,关键在于巧妙地建模 一共有n个月份,源点设为0,汇点设为n+1 1.源点向所有月份连边,容量为正无穷,费用为该月进货的费用 2.每个月向下一个月连边,容量为仓库容量,费用为存货费用 ...
- 洛谷P4016 负载平衡问题 费用流
这道题还是很好的. 考察了选手对网络流的理解. 首先,任意两个相邻点之间的运货量时没有限制的. 我们可以将相邻点之间的流量建为无限大,单位费用设为 1,代表运输一个货物需耗费一个代价. 由于题目要求最 ...
随机推荐
- java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作
ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...
- Python Twisted系列教程6:抽象地利用Twisted
作者:dave@http://krondo.com/and-then-we-took-it-higher/ 译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列. 打造可以复用的诗歌下载客户端 ...
- Protege4.3使用入门(一)
1.下载 下载地址http://protege.stanford.edu/download/protege/4.3/installanywhere/Web_Installers/,目前版本信息Prot ...
- IdentityHashMap
区别与其他的键不能重复的容器,IdentityHashMap允许key值重复,但是——key必须是两个不同的对象,即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等, ...
- ActiveX每次网页打开提示活动内容运行
(2) 设置允许活动内容运行. 在启动调试,网页经常会呈现如下提示框,每次都要确认,很麻烦. 以下方法可以消除这个提示框. 在IE中打开Internet 选项对话框,选择高级选项卡,勾选里 ...
- 12-EasyNetQ之消息版本控制
为了能够支持消息版本控制,你需要确保这个必要的组件已配置.最简单的实现是这样的: var bus = RabbitHutch.CreateBus("host=localhost", ...
- Java中的Constants类
1.遇到代码中的问题 String userName = (String) request.getParameter("userName"); String passWord = ...
- mongo_1 新手之路
mongodb 进入.在bin目录下 至于安装各位自己查资料吧 .不废话了 直接上图.这种表示已经成功进入mongo 本人mongo 数据库存放地址.如有需要可以清空可以自己删除. 接下来就是 ...
- Python学习笔记_我的参考网址
Python学习笔记, 下面记录网上搜到的可参考的网址: 一.关于Tkinter 1.Python3中tkinter模块使用方法详解 https://blog.csdn.net/Fighting_Bo ...
- Luogu 4781 【模板】拉格朗日插值
模板题. 拉格朗日插值的精髓在于这个公式 $$f(x) = \sum_{i = 1}^{n}y_i\prod _{j \neq i}\frac{x - x_i}{x_j - x_i}$$ 其中$(x_ ...