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

★★   输入文件:tran.in   输出文件:tran.out   简单对比
时间限制:1 s   内存限制:128 MB

«问题描述:

«编程任务:
对于给定的m 个仓库和n 个零售商店间运送货物的费用,计算最优运输方案和最差运
输方案。
«数据输入:

«结果输出:
程序运行结束时,将计算出的最少运输费用和最多运输费用输出到文件tran.out中。
输入文件示例 输出文件示例
tran.in
2 3
220 280
170 120 210
77 39 105

150 186 122

tran.out

69140

对于所有数据:1<=N,M<=100

题解:
比较容易想到费用流。
建图:
1>建立虚拟源S和汇T。
2>从S到m个仓库建流量为a[i],费用为0的边。
3>从n个商店向T建流量为b[i],费用为0的边。
4>从m个仓库向n个商店建流量为无穷大,费用为c[i][j]的边。
然后跑一边最小费用,再跑一边最大费用就好了。

AC代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define m(s,t) memset(s,t,sizeof s)
#define R register
#define inf 2139062143
using namespace std;
int read(){R int x=0;bool f=1;R char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return f?x:-x;
}
const int N=310;
struct node{int v,next,cap,cost;
}e[N*N];int tot=1;
int n,m,S,T,ans,head[N],pree[N],prev[N],flow[N],dis[N],q[N*10];
int a[N],b[N],c[N][N];
bool vis[N];
void add(int x,int y,int a,int b){e[++tot].v=y;e[tot].cap=a;e[tot].cost=b;e[tot].next=head[x];head[x]=tot;
}
void ins(int x,int y,int a,int b){add(x,y,a,b);add(y,x,0,-b);
}
void build(){S=0,T=m+n+1;for(int i=1;i<=m;i++) ins(S,i,a[i],0);for(int i=1;i<=n;i++) ins(i+m,T,b[i],0);for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){ins(i,j+m,inf,c[i][j]);}}
}
void Cl(){tot=1;ans=0;m(head,0);m(pree,0);m(prev,0);m(flow,0);
}
bool spfa(int k){m(vis,0);k>0?m(dis,127):m(dis,128);int h=0,t=1;q[t]=S;dis[S]=0;vis[S]=1;flow[S]=inf;while(h!=t){int x=q[++h];vis[x]=0;for(int i=head[x];i;i=e[i].next){int v=e[i].v,cap=e[i].cap,cost=e[i].cost;if(cap>0&&((k>0&&dis[v]>dis[x]+cost)||(k<0&&dis[v]<dis[x]+cost))){dis[v]=dis[x]+cost;prev[v]=x;pree[v]=i;flow[v]=min(flow[x],cap);if(!vis[v]){vis[v]=1;q[++t]=v;}}}}if(k>0) return dis[T]<inf;else return dis[T]>0;
}
void work(){for(int i=T;i!=S;i=prev[i]){e[pree[i]].cap-=flow[T];e[pree[i]^1].cap+=flow[T];}ans+=flow[T]*dis[T];
}
int main(){freopen("tran.in","r",stdin);freopen("tran.out","w",stdout);m=read();n=read();for(int i=1;i<=m;i++) a[i]=read();for(int i=1;i<=n;i++) b[i]=read();for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){c[i][j]=read();}}build();while(spfa(1)) work();printf("%d\n",ans);Cl();build();while(spfa(-1)) work();printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/shenben/p/6220688.html

739. [网络流24题] 运输问题相关推荐

  1. 线性规划与网络流24题 运输问题(最裸的费用流了)

    存费用流模板 用sfpa算出最小费用和路径,沿这条路径增广 1 const 2 inf=maxlongint; 3 var 4 n,m:longint; 5 map,a,w:array[0..120, ...

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

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

  3. 「网络流24题」 题目列表

    「网络流24题」 题目列表 序号 题目标题 模型 题解 1 飞行员配对方案问题 二分图最大匹配 <1> 2 太空飞行计划问题 最大权闭合子图 <2> 3 最小路径覆盖问题 二分 ...

  4. 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)

    ------------------------------------------------------------------------------------ 17/24 --------- ...

  5. 【题解】网络流24题一句话题解集合

    最近写了下<线性规划与网络流24题>,发下代码和题解,事实上就是将交给cycycy的题解复制一下 T1 飞行员配对方案问题 solution 裸的匈牙利 code #include< ...

  6. cwl的网络流24题练习

    网络流24题 编号 题目 备注 1 飞行员配对方案问题 二分图最大匹配,可最大流解决 2 太空飞行计划问题   3 最小路径覆盖问题  有向图最小路径覆盖,解法都写题目上了 4 魔术球问题  有向图最 ...

  7. 「网络流24题」 12. 软件补丁问题

    「网络流24题」 12. 软件补丁问题 状压 DP,SPFA 转移. 没错,跟网络流没任何关系. b1.b2.f1.f2 都用二进制存下来,第 i 位表示是否有这个错误. 然后从每位都是 1 到 0 ...

  8. loj #6226. 「网络流 24 题」骑士共存问题

    #6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些 ...

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

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

最新文章

  1. TensorFlow 莫烦 手写识别 cross_entry (五)
  2. MySQL 安装包下载教程
  3. win10弹不出密码输入框_电脑互访提示输入网络密码,怎么办?
  4. 【机器学习】集成学习ensemble之随机森林
  5. 云网管—云上构建网络自动化体系
  6. 性能测试基础之JMeter聚合报告详解
  7. 第 20 次 CSP认证 202009-4 星际旅行
  8. fsLayui联动表格使用(二)
  9. unity3d协同不同设备的代码
  10. mysql中count(*)、count(1)和count(字段)的区别
  11. 威联通_AMD YES!威联通高性价比9盘位TS-963N 5GbE NAS体验
  12. python用matplotlib或boxplot作图的时候,中文标注无法正常显示,乱码为小方框的解决办法
  13. 【gp数据库】你可能不知道却超级实用的函数
  14. cf最低要求配置2021是什么
  15. 【LeetCode】975. Odd Even Jump 解题报告(C++)
  16. [转]浅析360的危害 我为什么推荐卸载360
  17. C++语言涉猎笔记(二)
  18. 一个完整的MSI包的配置文件XML的内容形式和查看方法ORCA
  19. 一个程序员修炼之道《论程序员的自我修养》
  20. 括号画家——解题报告

热门文章

  1. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 对象控制反转
  2. 简易的实现对象内存池
  3. Linux版本配置环境变量,如何linux环境下配置环境变量过程图解
  4. python 常量 模块_Python字符串模块的有用常量
  5. Golang——结构体创建与初始化、结构体与数组、结构体与切片、结构体与map、结构体作为函数参数、结构体方法、结构体方法继承
  6. 如何下载php-5.5.38.tar.gz_搭建PHP服务器php-5.3.28.tar.gz
  7. mysql any 效率_关于mysql的性能优化
  8. html页面tableview,用JS写的一个TableView控件代码
  9. 在python语言中不能作为变量名的是什么_4、 在 Python 中可以使用 if 作为变量名。 (1.0分)_学小易找答案...
  10. 计算机第二课堂教学计划,小学的第二课堂教学计划