P4016 负载平衡问题 网络流重温
P4016 负载平衡问题
这个题目现在第二次做,感觉没有这么简单,可能是我太久没有写这种题目了,基本上都忘记了,所以我连这个是费用流都没有看出来。
有点小伤心,知道是费用流之后,我居然还拆点了。
这个写完之后确实感觉没有那么难,但是写的过程还是很艰辛的,这个为什么是一个费用流呢,
因为我们知道每移动一个单位的货物,就会产生一单位的费用,所以这个就是费用流。
再而为什么这个不要拆点呢,因为每一个点都是只有一种属性,要么就是多了要输出,要么就是少了要进入,这个其实我也有点不是很清楚。
还没有完全弄明白。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <string>
#include <iostream>
#include <vector>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 3e5 + ;
typedef long long ll;
struct edge
{
int u, v, c, f, cost;
edge(int u=,int v=,int c=,int f=,int cost=):u(u),v(v),c(c),f(f),cost(cost){}
};
vector<edge>e;
vector<int>G[maxn];
int a[maxn], p[maxn], inq[maxn], d[maxn], n, m;
void init(int n)
{
for (int i = ; i <= n; i++) G[i].clear();
e.clear();
}
void addedge(int u,int v,int c,int cost)
{
e.push_back(edge(u, v, c, , cost));
e.push_back(edge(v, u, , , -cost));
int m = e.size();
G[u].push_back(m - );
G[v].push_back(m - );
}
bool spfa(int s,int t,int &flow,ll &cost)
{
memset(d, inf, sizeof(d));
memset(inq, , sizeof(inq));
d[s] = , inq[s] = ;
p[s] = , a[s] = inf;
queue<int>que;
que.push(s);
while(!que.empty())
{
int u = que.front(); que.pop();
inq[u] = ;
for(int i=;i<G[u].size();i++)
{
edge &now = e[G[u][i]];
int v = now.v;
if(now.c>now.f&&d[v]>d[u]+now.cost)
{
d[v] = d[u] + now.cost;
p[v] = G[u][i];
a[v] = min(a[u], now.c - now.f);
if (!inq[v]) que.push(v), inq[v] = ;
}
}
}
if (d[t] == inf) return false;
flow += a[t];
cost += d[t] * 1ll * a[t];
for(int u=t;u!=s;u=e[p[u]].u)
{
e[p[u]].f += a[t];
e[p[u] ^ ].f -= a[t];
}
return true;
} int MincostMaxflow(int s,int t,ll &cost)
{
cost = ;
int flow = ;
while (spfa(s, t, flow, cost));
return flow;
} int main() {
int n, sum = ;
scanf("%d", &n);
for (int i = ; i <= n; i++) scanf("%d", &a[i]), sum += a[i];
sum /= n;
int s = , t = n + ;
for(int i=;i<=n;i++)
{
if (a[i] > sum) addedge(s, i, a[i] - sum, );
else addedge(i, t, sum - a[i], );
if(i==)
{
addedge(, , inf, );
addedge(, n, inf, );
}
else if(i==n)
{
addedge(n, , inf, );
addedge(n, n - , inf, );
}
else
{
addedge(i, i + , inf, );
addedge(i, i - , inf, );
}
}
ll ans = ;
MincostMaxflow(s, t, ans);
printf("%lld\n", ans);
return ;
}
P4016 负载平衡问题 网络流重温的更多相关文章
- P4016 负载平衡问题 网络流
P4016 负载平衡问题 题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nn个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运 ...
- 洛谷 P4016负载平衡问题【费用流】题解+AC代码
洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...
- Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流)
Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流) Description G 公司有n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使n ...
- P4016 负载平衡问题(最小费用最大流)
P4016 负载平衡问题 题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nn 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬 ...
- 洛谷P4016负载平衡
题目 负载平衡问题是一个比较经典的网络流问题,但是该问题还有一个数学贪心法. 所以做这个题前,其实可以做一下均分纸牌问题. 均分纸牌问题 均分纸牌问题可以说是作为贪心的入门题. 做法 首先我们应当把原 ...
- 洛谷 [P4016] 负载平衡问题
贪心做法 第一眼看见觉得和均分纸牌差不多,然而因为这是环形的,并不能用均分纸牌的方法做,但是均分纸牌的思想仍然适用 首先我们假设平均数为sum1. 那么对于第1个人,我们假设他给第N个人K个糖果, 第 ...
- Luogu P4016 负载平衡问题
传说中的网络流24题之一,我刷的第二题菜. 据说这种东西做完了就可以有质的飞越?不过看着这些Luogu评级就有点蒙蔽. 首先我们看一下题目发现这不是均分纸牌的加强板吗,但是那个环的操作极大地限制了我的 ...
- P4016 负载平衡问题
题目描述 G 公司有 n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入输出格式 输入格式: 文 ...
- (洛谷P2512||bzoj1045) [HAOI2008]糖果传递 || 洛谷P4016 负载平衡问题 || UVA11300 Spreading the Wealth || (洛谷P3156||bzoj3293) [CQOI2011]分金币
bzoj1045 洛谷P4016 洛谷P2512 bzoj3293 洛谷P3156 题解:https://www.luogu.org/blog/LittleRewriter/solution-p251 ...
随机推荐
- stand up meeting 12-9
今天项目小组本已约好在今天下午四点半进行今天的daily scrum: 但是在四点半的时候,天赋和士杰同学均因组内项目会议延时,导致今天的daily scrum只能在晚上进行,但静雯同学因身体不舒服无 ...
- 编写高质量Python程序(四)库
本系列文章为<编写高质量代码--改善Python程序的91个建议>的精华汇总. 按需选择 sort() 或者 sorted() Python 中常用的排序函数有 sort() 和 sort ...
- Bi-shoe and Phi-shoe LightOJ - 1370
欧拉函数. 欧拉函数打表模板: #define maxn 3000010 int p[maxn]; void oula(){ int i,j; ; i<=maxn; i++) p[i]=i; ; ...
- vue2.x学习笔记(八)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12577433.html. 列表渲染 vue提供了一个[v-for]指令用于列表渲染(循环). 用[v-for]指令 ...
- 2019CISCN华南线下两道web复现
原帖地址 : https://xz.aliyun.com/t/5558 2019CISCN华南线下的两个简单 web 部分题目下载地址,有的不完整 : 点我点我 web 1 考点 : 无参函数的 RC ...
- Golang交付至Kubernetes
目录 0.前言 1.Go服务构建 1.1.制作Go服务镜像底包 1.2.制作slave基础镜像底包 1.2.1.Golang镜像 1.2.2.Docker镜像 2.创建golang流水线 3.流水线构 ...
- PHP入门-1
基本数据类型: 1.整形 2.浮点型 3.字符串 4.布尔型 5.数组和对象 6.null 7.资源类型 8.伪类型 由于php是弱语言,所以他的数据类型不用自己来定义.定义一个数据类型,$name ...
- css3变形
CSS3变形--旋转 rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点 ...
- XSS Challenge(1)
XSS Challenges http://xss-quiz.int21h.jp/ Stage #1 注入alert(document.domain),先试一试输入后会返回什么: 返回在标签中,直接尝 ...
- [Qt] Release模式下产生调试信息
分两步,设置Qt配置文件,设置VS. https://blog.csdn.net/itas109/article/details/83652387 F:\Qt\Qt5.7.1\5.7\msvc2015 ...