存费用流模板

用sfpa算出最小费用和路径,沿这条路径增广

  1 const
  2         inf=maxlongint;
  3 var
  4         n,m:longint;
  5         map,a,w:array[0..120,0..120]of longint;
  6
  7 procedure init;
  8 var
  9         i,j:longint;
 10 begin
 11         read(m,n);
 12         for i:=1 to m do
 13           read(map[0,i]);
 14         for i:=1 to n do
 15           read(map[m+i,n+m+1]);
 16         for i:=1 to m do
 17           for j:=1 to n do
 18             begin
 19               read(w[i,m+j]);
 20               w[m+j,i]:=-w[i,m+j];
 21               map[i,m+j]:=inf;
 22             end;
 23 end;
 24
 25 var
 26         flag,d,dis,pre:array[0..120]of longint;
 27         time:longint;
 28
 29 function spfa:boolean;
 30 var
 31         i,head,tail,num:longint;
 32 begin
 33         head:=1;
 34         tail:=1;
 35         num:=1;
 36         inc(time);
 37         for i:=1 to n+m+1 do
 38           dis[i]:=inf;
 39         dis[0]:=0;
 40         d[1]:=0;
 41         flag[0]:=time;
 42         while num>0 do
 43           begin
 44                 for i:=1 to n+m+1 do
 45                   if (a[d[head],i]>0)and(dis[d[head]]+w[d[head],i]<dis[i]) then
 46                   begin
 47                         dis[i]:=dis[d[head]]+w[d[head],i];
 48                         pre[i]:=d[head];
 49                         if flag[i]<>time then
 50                         begin
 51                           flag[i]:=time;
 52                           inc(num);
 53                           tail:=tail mod(n+m+1)+1;
 54                           d[tail]:=i;
 55                         end;
 56                   end;
 57                 flag[d[head]]:=time-1;
 58                 head:=head mod(n+m+1)+1;
 59                 dec(num);
 60           end;
 61         if dis[n+m+1]=inf then exit(false);
 62         exit(true);
 63 end;
 64
 65 procedure work;
 66 var
 67         i,j,aug,ans:longint;
 68 begin
 69         for i:=0 to n+m+1 do
 70           for j:=0 to n+m+1 do
 71             a[i,j]:=map[i,j];
 72         ans:=0;
 73         while spfa do
 74           begin
 75             aug:=inf;
 76             i:=n+m+1;
 77             while i<>0 do
 78               begin
 79                 j:=pre[i];
 80                 if a[j,i]<aug then aug:=a[j,i];
 81                 i:=j;
 82               end;
 83             inc(ans,dis[n+m+1]*aug);
 84             i:=n+m+1;
 85             while i<>0 do
 86               begin
 87                 j:=pre[i];
 88                 inc(a[i,j],aug);
 89                 dec(a[j,i],aug);
 90                 i:=j;
 91               end;
 92           end;
 93         writeln(ans);
 94         ans:=0;
 95         for i:=1 to m do
 96           for j:=1 to n do
 97             begin
 98               w[i,j+m]:=-w[i,j+m];
 99               w[j+m,i]:=-w[j+m,i];
100             end;
101         for i:=0 to n+m+1 do
102           for j:=0 to n+m+1 do
103             a[i,j]:=map[i,j];
104         ans:=0;
105         while spfa do
106           begin
107             aug:=inf;
108             i:=n+m+1;
109             while i<>0 do
110               begin
111                 j:=pre[i];
112                 if a[j,i]<aug then aug:=a[j,i];
113                 i:=j;
114               end;
115             inc(ans,dis[n+m+1]*aug);
116             i:=n+m+1;
117             while i<>0 do
118               begin
119                 j:=pre[i];
120                 inc(a[i,j],aug);
121                 dec(a[j,i],aug);
122                 i:=j;
123               end;
124           end;
125         writeln(-ans);
126 end;
127
128 begin
129     assign(input,'trans.in');
130     reset(input);
131     assign(output,'trans.out');
132     rewrite(output);
133         init;
134         work;
135     close(input);
136     close(output);
137 end.

View Code

转载于:https://www.cnblogs.com/Randolph87/p/3602203.html

线性规划与网络流24题 运输问题(最裸的费用流了)相关推荐

  1. 解题报告:线性规划与网络流24题

    目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...

  2. 739. [网络流24题] 运输问题

    739. [网络流24题] 运输问题 ★★   输入文件:tran.in   输出文件:tran.out   简单对比 时间限制:1 s   内存限制:128 MB «问题描述: «编程任务: 对于给 ...

  3. 囧——线性规划与网络流24题之网络流入门经典

    搞了好久终于搞定线性规划与网络流24题,不过机器人路径至今无解,第22题感觉是数据错了~~~ 我的代码,数据和题目题解是BYVoid那弄到的:http://download.csdn.net/sour ...

  4. [线性规划与网络流24题] 网络流常见模型

    最近两个月在做<线性规划与网络流24题>这套题,加深了对网络流的理解. 涵盖到的模型有:二分图匹配.二分图的最大独立集.最大权闭合图.有向无环图的最小路径覆盖.最多不相交路径.最大权不相交 ...

  5. 【网络流24题】圆桌聚餐(最大流)

    [网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做 ...

  6. 【线性规划与网络流24题】汽车加油行驶问题 分层图

    汽车加油行驶问题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 给定一个 N*N的方形网格,设其左上角为起点◎,坐标为( 1,1),X轴向右为 ...

  7. 【线性规划与网络流24题】孤岛营救问题 分层图

    孤岛营救问题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 1944年,特种兵麦克接到国防部的命令.要求马上赶赴太平洋上的一个孤岛,营救被敌军 ...

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

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

  9. 【线性规划和网络流24题】

    (1)飞行员配对方案问题:二分图最大匹配. 思路:略. View Code 1 #include<cstdio> 2 #include<cstring> 3 #define M ...

最新文章

  1. debian10 简单的DNS服务器搭建
  2. 「x is All You Need」,当学术论文开始标题党……
  3. 【OpenCV 4开发详解】颜色模型与转换
  4. Python强大的格式化format
  5. oracle迁移到mysql工具_oracle数据库想迁移到mysql上 有什么方法或者工具吗
  6. Python学习14 模块和包
  7. 计算机专业排版有哪些,计算机专业英语词汇(完美排版_大容量打印版).pdf
  8. linux 升级 git版本,CentOS下升级Git1.7.1升级到Git2.2.1
  9. [f]class获取元素函数
  10. 中国石油大学《机械基础(设计与制造)》第二阶段在线作业
  11. spring-ant-处理zip
  12. java 视频分辨率_javaCV开发详解之15:视频帧像素格式转换
  13. python登录接口并发测试_使用python脚本作接口并发测试
  14. linux桌面lxde 安装_在Ubuntu上,如何安装轻量的LXDE桌面
  15. SAP总账科目增强写入客商(BAPI导入)
  16. “散场“却不”离场“的2020进博会品牌第一自行车辐轮王
  17. 排序算法7——归并排序
  18. SEO并不难学,我是如何学习好SEO的
  19. 汽车汽配行业供应链协同管理平台一体化管理,SCM供应链提升企业竞争力
  20. 电池pack结构_电池PACK是什么?锂电池包PACK结构设计需要考虑哪些因素?

热门文章

  1. 高并发下的接口幂等性解决方案!
  2. 异地多活场景下的数据同步之道 | 珍藏版
  3. 如何向5岁小孩解释什么是支持向量机(SVM)?
  4. 微服务为什么一定要用docker
  5. vscode 一些基本知识
  6. 框架:SpringMVC中Interceptor拦截器的两种实现
  7. 处理被中断的系统调用
  8. 【Scratch】青少年蓝桥杯_每日一题_1.1_美国队长盾牌
  9. html表格选择一行,vue + element table表格如何默认选中第一行
  10. python flask框架发布问答平台注册页面_Python|Flask框架实现QQ账号登录