传送门

图给的好坑……还得倒过来……

用大佬的图做个示范

我们考虑左图吧

把每一个点向下连边,容量$1$,费用为给出的价值(表示一个机器人可以过去取得标本)

再连一条边,容量$inf$,费用$0$(表示剩下的机器人过去无法取得标本)

然后向右连的边也一样

注意连边的顺序

然后源点向所有出发点连边,容量为机器人数,费用$0$,所有目的地向汇点连边,容量为机器人数,费用为$0$

跑个最大费用流

  1. //minamoto
  2. #include<bits/stdc++.h>
  3. #define inf 0x3f3f3f3f
  4. #define get(i,j) (i-1)*m+j
  5. using namespace std;
  6. #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  7. char buf[<<],*p1=buf,*p2=buf;
  8. inline int read(){
  9. #define num ch-'0'
  10. char ch;bool flag=;int res;
  11. while(!isdigit(ch=getc()))
  12. (ch=='-')&&(flag=true);
  13. for(res=num;isdigit(ch=getc());res=res*+num);
  14. (flag)&&(res=-res);
  15. #undef num
  16. return res;
  17. }
  18. const int N=,M=;
  19. int ver[M],edge[M],head[N],Next[M],flow[M],tot=;
  20. int dis[N],disf[N],vis[N],Pre[N],last[N],n,m,s,t,a,b;
  21. queue<int> q;
  22. inline void add(int u,int v,int f,int e){
  23. ver[++tot]=v,Next[tot]=head[u],head[u]=tot,flow[tot]=f,edge[tot]=e;
  24. ver[++tot]=u,Next[tot]=head[v],head[v]=tot,flow[tot]=,edge[tot]=-e;
  25. }
  26. bool spfa(){
  27. memset(dis,0xef,sizeof(dis));
  28. q.push(s),dis[s]=,disf[s]=inf,Pre[t]=-;
  29. while(!q.empty()){
  30. int u=q.front();q.pop();vis[u]=;
  31. for(int i=head[u];i;i=Next[i]){
  32. int v=ver[i];
  33. if(flow[i]&&dis[v]<dis[u]+edge[i]){
  34. dis[v]=dis[u]+edge[i],Pre[v]=u,last[v]=i;
  35. disf[v]=min(disf[u],flow[i]);
  36. if(!vis[v]) vis[v]=,q.push(v);
  37. }
  38. }
  39. }
  40. return ~Pre[t];
  41. }
  42. int dinic(){
  43. int maxcost=;
  44. while(spfa()){
  45. int u=t;maxcost+=disf[t]*dis[t];
  46. while(u!=s){
  47. flow[last[u]]-=disf[t];
  48. flow[last[u]^]+=disf[t];
  49. u=Pre[u];
  50. }
  51. }
  52. return maxcost;
  53. }
  54. int main(){
  55. a=read(),b=read(),n=read()+,m=read()+;
  56. s=,t=n*m+;
  57. for(int i=;i<=n;++i)
  58. for(int j=;j<m;++j){
  59. int x=read(),hh=get(i,j),tt=hh+;
  60. add(hh,tt,,x);
  61. add(hh,tt,inf,);
  62. }
  63. for(int j=;j<=m;++j)
  64. for(int i=;i<n;++i){
  65. int x=read(),hh=get(i,j),tt=hh+m;
  66. add(hh,tt,,x);
  67. add(hh,tt,inf,);
  68. }
  69. for(int i=;i<=a;++i){
  70. int k=read(),x=read()+,y=read()+;
  71. add(s,get(x,y),k,);
  72. }
  73. for(int i=;i<=b;++i){
  74. int k=read(),x=read()+,y=read()+;
  75. add(get(x,y),t,k,);
  76. }
  77. printf("%d\n",dinic());
  78. return ;
  79. }

洛谷P4012 深海机器人问题(费用流)的更多相关文章

  1. 洛谷P4012 深海机器人问题(费用流)

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

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

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

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

    和火星那个有点像,但是这个价值直接在路径上,不用拆点,对于每条价值为w的边(i,j),连接(i,j,1,w)(i,j,inf,0),表示价值只能取一次,然后连接源点和所有出发点(s,i,k,0),所有 ...

  4. LuoguP4012 深海机器人问题(费用流)

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

  5. 洛谷 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 ...

  6. 洛谷P4003 无限之环(费用流)

    传送门 神仙题啊……不看题解我可能一年都不一定做得出来……FlashHu大佬太强啦 到底是得有怎样的脑回路才能一眼看去就是费用流啊…… 建好图之后套个板子就好了,那么我们着重来讨论一下怎么建图 首先, ...

  7. 洛谷P3356 火星探险问题(费用流)

    题目描述 火星探险队的登陆舱将在火星表面着陆,登陆舱内有多部障碍物探测车.登陆舱着陆后,探测车将离开登陆舱向先期到达的传送器方向移动.探测车在移动中还必须采集岩石标本.每一块岩石标本由最先遇到它的探测 ...

  8. 洛谷P2517 HAOI2010 订货 (费用流)

    标准的费用流问题,关键在于巧妙地建模 一共有n个月份,源点设为0,汇点设为n+1 1.源点向所有月份连边,容量为正无穷,费用为该月进货的费用 2.每个月向下一个月连边,容量为仓库容量,费用为存货费用 ...

  9. 洛谷P4016 负载平衡问题 费用流

    这道题还是很好的. 考察了选手对网络流的理解. 首先,任意两个相邻点之间的运货量时没有限制的. 我们可以将相邻点之间的流量建为无限大,单位费用设为 1,代表运输一个货物需耗费一个代价. 由于题目要求最 ...

随机推荐

  1. java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作

    ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...

  2. Python Twisted系列教程6:抽象地利用Twisted

    作者:dave@http://krondo.com/and-then-we-took-it-higher/  译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列. 打造可以复用的诗歌下载客户端 ...

  3. Protege4.3使用入门(一)

    1.下载 下载地址http://protege.stanford.edu/download/protege/4.3/installanywhere/Web_Installers/,目前版本信息Prot ...

  4. IdentityHashMap

    区别与其他的键不能重复的容器,IdentityHashMap允许key值重复,但是——key必须是两个不同的对象,即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等, ...

  5. ActiveX每次网页打开提示活动内容运行

    (2)       设置允许活动内容运行. 在启动调试,网页经常会呈现如下提示框,每次都要确认,很麻烦. 以下方法可以消除这个提示框. 在IE中打开Internet 选项对话框,选择高级选项卡,勾选里 ...

  6. 12-EasyNetQ之消息版本控制

    为了能够支持消息版本控制,你需要确保这个必要的组件已配置.最简单的实现是这样的: var bus = RabbitHutch.CreateBus("host=localhost", ...

  7. Java中的Constants类

    1.遇到代码中的问题 String userName = (String) request.getParameter("userName"); String passWord = ...

  8. mongo_1 新手之路

    mongodb  进入.在bin目录下   至于安装各位自己查资料吧 .不废话了 直接上图.这种表示已经成功进入mongo 本人mongo  数据库存放地址.如有需要可以清空可以自己删除. 接下来就是 ...

  9. Python学习笔记_我的参考网址

    Python学习笔记, 下面记录网上搜到的可参考的网址: 一.关于Tkinter 1.Python3中tkinter模块使用方法详解 https://blog.csdn.net/Fighting_Bo ...

  10. Luogu 4781 【模板】拉格朗日插值

    模板题. 拉格朗日插值的精髓在于这个公式 $$f(x) = \sum_{i = 1}^{n}y_i\prod _{j \neq i}\frac{x - x_i}{x_j - x_i}$$ 其中$(x_ ...