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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. using namespace std;
  5. const int N=1000005,inf=1e9;
  6. int a,b,n,m,h[N],cnt=1,dis[N],fr[N],id[20][20],tot,ans,s,t;
  7. bool v[N];
  8. struct qwe
  9. {
  10. int ne,no,to,va,c;
  11. }e[N<<2];
  12. int read()
  13. {
  14. int r=0,f=1;
  15. char p=getchar();
  16. while(p>'9'||p<'0')
  17. {
  18. if(p=='-')
  19. f=-1;
  20. p=getchar();
  21. }
  22. while(p>='0'&&p<='9')
  23. {
  24. r=r*10+p-48;
  25. p=getchar();
  26. }
  27. return r*f;
  28. }
  29. void add(int u,int v,int w,int c)
  30. {
  31. cnt++;
  32. e[cnt].ne=h[u];
  33. e[cnt].no=u;
  34. e[cnt].to=v;
  35. e[cnt].va=w;
  36. e[cnt].c=c;
  37. h[u]=cnt;
  38. }
  39. void ins(int u,int v,int w,int c)
  40. {//cout<<u<<" "<<v<<" "<<w<<endl;
  41. add(u,v,w,c);
  42. add(v,u,0,-c);
  43. }
  44. bool spfa()
  45. {
  46. queue<int>q;
  47. for(int i=s;i<=t;i++)
  48. dis[i]=-inf;
  49. dis[s]=0;
  50. v[s]=1;
  51. q.push(s);
  52. while(!q.empty())
  53. {
  54. int u=q.front();
  55. q.pop();
  56. v[u]=0;
  57. for(int i=h[u];i;i=e[i].ne)
  58. if(e[i].va>0&&dis[e[i].to]<dis[u]+e[i].c)
  59. {
  60. dis[e[i].to]=dis[u]+e[i].c;
  61. fr[e[i].to]=i;
  62. if(!v[e[i].to])
  63. {
  64. v[e[i].to]=1;
  65. q.push(e[i].to);
  66. }
  67. }
  68. }
  69. return dis[t]!=-inf;
  70. }
  71. void mcf()
  72. {//cout<<"OK"<<endl;
  73. int x=inf;
  74. for(int i=fr[t];i;i=fr[e[i].no])
  75. x=min(x,e[i].va);
  76. for(int i=fr[t];i;i=fr[e[i].no])
  77. {
  78. e[i].va-=x;
  79. e[i^1].va+=x;
  80. ans+=x*e[i].c;
  81. }
  82. }
  83. int main()
  84. {
  85. a=read(),b=read(),n=read()+1,m=read()+1;
  86. for(int i=1;i<=n;i++)
  87. for(int j=1;j<=m;j++)
  88. id[i][j]=++tot;
  89. s=0,t=tot+1;
  90. for(int i=1;i<=n;i++)
  91. for(int j=1;j<m;j++)
  92. {
  93. int x=read();
  94. ins(id[i][j],id[i][j+1],1,x);
  95. ins(id[i][j],id[i][j+1],inf,0);
  96. }
  97. for(int j=1;j<=m;j++)
  98. for(int i=1;i<n;i++)
  99. {
  100. int x=read();
  101. ins(id[i][j],id[i+1][j],1,x);
  102. ins(id[i][j],id[i+1][j],inf,0);
  103. }
  104. for(int i=1;i<=a;i++)
  105. {
  106. int k=read(),x=read()+1,y=read()+1;
  107. ins(s,id[x][y],k,0);
  108. }
  109. for(int i=1;i<=b;i++)
  110. {
  111. int r=read(),x=read()+1,y=read()+1;
  112. ins(id[x][y],t,r,0);
  113. }//cout<<"ok1"<<endl;
  114. while(spfa())
  115. mcf();//cout<<"ok2"<<endl;
  116. printf("%d\n",ans);
  117. return 0;
  118. }

洛谷 P4012 深海机器人问题 【最大费用最大流】的更多相关文章

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

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

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

    传送门 图给的好坑……还得倒过来…… 用大佬的图做个示范 我们考虑左图吧 把每一个点向下连边,容量$1$,费用为给出的价值(表示一个机器人可以过去取得标本) 再连一条边,容量$inf$,费用$0$(表 ...

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

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

  4. 洛谷P3381 - 【模板】最小费用最大流

    原题链接 题意简述 模板题啦~ 题解 每次都以费用作为边权求一下最短路,然后沿着最短路增广. Code //[模板]最小费用最大流 #include <cstdio> #include & ...

  5. 洛谷 P2053 [SCOI2007]修车(最小费用最大流)

    题解 最小费用最大流 n和m是反着的 首先, \[ ans = \sum{cost[i][j]}*k \] 其中,\(k\)为它在当前技术人员那里,排倒数第\(k\)个修 我们可以对于每个技术人员进行 ...

  6. 洛谷 P3381【模板】最小费用最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表 ...

  7. 洛谷 P3381 【模板】最小费用最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数\(N.M.S.T\) ...

  8. 洛谷P1251 餐巾计划问题(最小费用最大流)

    题意 一家餐厅,第$i$天需要$r_i$块餐巾,每天获取餐巾有三种途径 1.以$p$的费用买 2.以$f$的费用送到快洗部,并在$m$天后取出 3.以$s$的费用送到慢洗部,并在$n$天后取出 问满足 ...

  9. 洛谷P4016 负载平衡问题(最小费用最大流)

    题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nn 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入输出格式 输入格 ...

随机推荐

  1. 在d盘中创建一个文件夹 在文件夹里创建三个txt文本

    import java.io.File; import java.io.IOException; public class FileDemo { public static void main(Str ...

  2. java.net.URISyntaxException的解决办法

    java.net.URISyntaxException的解决办法 近日在用HttpClient访问抓取汇率时,为了省力,直接采用 String url = "http://api.liqwe ...

  3. SQLAlchemy的group_by和order_by的区别

    1.官网解释: group_by(*criterion) apply one or more GROUP BY criterion to the query and return the newly ...

  4. There is no PasswordEncoder mapped for the id "null"

    There is no PasswordEncoder mapped for the id "null" 学习了:https://blog.csdn.net/dream_an/ar ...

  5. Spring之IOC篇章具体解释

    专题一   IOC 1.接口以及面向接口编程 a.结构设计中,分清层次以及调用关系,每层仅仅向外(或者上层)提供一组功能接口,各层间仅依赖接口而非实现类这样做的优点是,接口实现的变动不影响各层间的调用 ...

  6. centos中w使用smbclient连接window出现:session setup failed: NT_STATUS_LOGON_FAILURE

    1. 在window中网络->我自己的电脑->能够查看到共享文件,说明window的共享是正常了; 2. 在window中配置共享时,使用的是仅仅同意超级管理员訪问,可是我把超级管理员改名 ...

  7. iOS iOS8中 问题&quot;registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later&quot; 解决方式

    问题重述: iOS 8中改变了通知注冊的方式,假设App须要同一时候支持iOS 7 和 8 的话,须要首先检查selector. 解决方式:在Xcode 6中 - (BOOL)application: ...

  8. Web—CSS概述

    一.概念: 它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言 的一个子集)等文件样式的计算机语言. 二.特点: 1.实现网页内容与样式的分离     2.降低图形文件的 ...

  9. 打造极致性能数据库中间件丨LVS+Keepalive+华为云DDM之理论篇

    背景说明 华为云分布式数据库中间件(Distributed Database Middleware,简称DDM),专注于解决数据库分布式扩展问题,突破了传统数据库的容量和性能瓶颈,实现海量数据高并发访 ...

  10. 命题作文:在一棵IPv4地址树中彻底理解IP路由表的各种查找过程

    这是一篇命题作文.近期一直想写点东西,但一直找不到题目.正好收到一封邮件,有人问我Linux路由表的布局问题以及路由缓存的问题,加之前些日子又帮人做了一个片上路由表,所以认为这是个好题目,索性花了多半 ...