[Luogu] 运输问题 -- 00
https://www.luogu.org/problemnew/show/4015
#include <bits/stdc++.h> #define gc getchar() using namespace std;
const int N = ;
const int oo = ; int n, m, S, T, now;
int head[N], dis[N], C[N][N], A[N], B[N], pre[N];
bool vis[N * N];
struct Node{int u, v, cost, flow, nxt;} G[(N * N) << ], E[(N * N) << ];
queue <int> Q; inline int read(){
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} inline void add(int u, int v, int flow, int cost){
G[now].u = u; G[now].v = v; G[now].flow = flow; G[now].cost = cost;
G[now].nxt = head[u]; head[u] = now ++;
} inline void build_G(){
for(int i = ; i <= n; i ++) add(S, i, oo, ), add(i, S, , );
for(int i = ; i <= n; i ++)
for(int j = ; j <= m; j ++)
add(i, n + j, A[i], C[i][j]), add(n + j, i, , - C[i][j]);
for(int i = ; i <= m; i ++) add(n + i, T, B[i], ), add(T, n + i, , );
for(int i = ; i <= now; i ++){
E[i].u = G[i].u; E[i].v = G[i].v; E[i].nxt = G[i].nxt;
E[i].cost = - G[i].cost; E[i].flow = G[i].flow;
}
} inline bool spfa(int start, int endd){
for(int i = S; i <= T; i ++) vis[i] = , dis[i] = oo;
dis[start] = ;
Q.push(start);
while(!Q.empty()){
int topp = Q.front();
Q.pop(); vis[topp] = ;
for(int i = head[topp]; ~ i; i = G[i].nxt){
int v = G[i].v;
if(dis[v] > dis[topp] + G[i].cost && G[i].flow > ){
dis[v] = dis[topp] + G[i].cost;
pre[v] = i;
if(!vis[v]) vis[v] = , Q.push(v);
}
}
}
return dis[endd] != oo;
} inline void Mfmc(int & Cost){
while(spfa(S, T)){
int endd = T, Now;
int min_f = oo;
while() {
Now = pre[endd];
min_f = min(min_f, G[Now].flow);
if(G[Now].u == S) break;
endd = G[Now].u;
}
Cost += dis[T] * min_f;
endd = T;
while(){
Now = pre[endd];
G[Now].flow -= min_f;
G[Now ^ ].flow += min_f;
if(G[Now].u == S) break;
endd = G[Now].u;
}
}
} int main()
{
n = read(); m = read(); T = n + m + ;
for(int i = S; i <= T; i ++) head[i] = -;
for(int i = ; i <= n; i ++) A[i] = read();
for(int i = ; i <= m; i ++) B[i] = read();
for(int i = ; i <= n; i ++) for(int j = ; j <= m; j ++) C[i][j] = read();
build_G();
int Min_cost();
Mfmc(Min_cost);
cout << Min_cost << endl;
for(int i = ; i <= now; i ++){
G[i].u = E[i].u; G[i].v = E[i].v; G[i].nxt = E[i].nxt;
G[i].cost = E[i].cost; G[i].flow = E[i].flow;
}
Min_cost = ;
Mfmc(Min_cost);
cout << - Min_cost;
return ;
}
/*
2 3
220 280
170 120 210
77 39 105
150 186 122
*/
[Luogu] 运输问题 -- 00的更多相关文章
- 网络流24题 ——运输问题 luogu 4015
题目描述:这里 题面已经提示我们这是费用流了 那么由源点向所有仓库连边,容量为仓库原有货物量,费用为0 然后由所有零售商店向汇点连边,容量为一个零售商店的需求量,费用为0 最后由仓库向零售商店连边,容 ...
- Luogu P4015 运输问题
题目链接 \(Click\) \(Here\) 继续颓网络流\(hhhhh\),虽然这次写的是个大水题,但是早上水一个网络流果然还是让人心情舒畅啊- 最大费用最大流不用非得反着费用建边.只要没有正环, ...
- Luogu 1603 - 斯诺登的密码 - [简单字符串操作]
题目链接:https://www.luogu.org/problemnew/show/P1603 题目背景 根据斯诺登事件出的一道水题 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混 ...
- Luogu 1613 跑路(最短路径,倍增)
Luogu 1613 跑路(最短路径,倍增) Description 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是 ...
- BZOJ 1565 Luogu P2805 [NOI2009]植物大战僵尸 (Tarjan判环、最小割)
我: "立个flag 14点之前调完这题" 洛谷AC时间: 2019-06-24 14:00:16 实力打脸... 网络流板子从来写不对系列 题目链接: (BZOJ) https: ...
- Luogu P2970 [USACO09DEC]自私的放牧
https://www.luogu.org/problemnew/show/P2970 P2970 [USACO09DEC]自私的放牧 题目描述 Each of Farmer John's N (1 ...
- [Luogu 1850] noip16 换教室
[Luogu 1850] noip16 换教室 好久没有更博客了,先唠嗑一会,花了两天的空闲时间大致做完了昨年的noip真题 虽然在经过思考大部分题目都可出解(天天爱跑步除外),但是并不知道考试时候造 ...
- BZOJ 1500 Luogu P2042 [NOI2005] 维护数列 (Splay)
手动博客搬家: 本文发表于20180825 00:34:49, 原地址https://blog.csdn.net/suncongbo/article/details/82027387 题目链接: (l ...
- 【Luogu】P1613 跑路
[Luogu]P1613 跑路 一.题目 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资 ...
随机推荐
- go String接口方法
该接口经常用于输出 struct 的值 或者记录struct数据日志 一个普遍存在的接口是 fmt 包中定义的 Stringer接口 发现 http://tour.studygolang.com/me ...
- java使用poi操作word, 支持动态的行(一个占位符插入多条)和表格中动态行, 支持图片
依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifa ...
- FPS 游戏实现D3D透视
FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视 ...
- django类视图as_view()方法解析
使用视图函数时,django完成URL解析之后,会直接把request对象以及URL解析器捕获的参数(比如re_path中正则表达捕获的位置参数或关键字参数)丢给视图函数,但是在类视图中,这些参数不能 ...
- 【转载】IIS网站如何同时解析带www和不带www的域名
针对公网上线的网站系统,很多网站的域名会同时含有带www和不带www的域名解析记录,如果需要同时解析带www和不带www的域名信息,则需要在相应的域名解析平台(如阿里云域名解析平台.腾讯云域名解析平台 ...
- wepy框架 怎么在template模板中使用函数
呵呵.介绍说是类似vue,用起来真累人,就想在模板中使用个函数都要查N久的文档才知道. 具体要怎么操作呢? 要先创建个wxs脚本文件,在里面定义函数或其它的,然后在页面或组件中引入这文件,就可以在模板 ...
- JS定时器做物体运动
JS定时器是函数 setInterval(函数体/函数名 , 时间) 清楚定时器 clearInterval(函数) 时间单位(毫秒) 1000毫秒 = 1秒 首先我们要知道用JS定时器能干什么? ...
- H5之拖拽
步骤: 1.为将要拖拽的元素设置允许拖拽,并赋予dragstart事件将其id转换成数据保存: 2.为容器添加dragover属性添加事件阻止浏览器默认事件,允许元素放置,并赋予drop事件进行元素的 ...
- js入门之内置数组对象 Array
一. 数组 1. 创建数组的两种方式 1. 数组字面量 var array = [] 2. 数组的构造函数创建数组 var array = new Array(); 2. 如何判断一个变量是否是数组 ...
- Qt布局
常用的布局方法 1. 水平布局类 QHBoxLayout 2. 垂直布局类 QVBoxLayout 3. 网格布局类 QGridLayout QHBoxLayout 对象横向排列开 QVBoxLayo ...