BZOJ 3876 统一下界上下界费用流
//Mcmf LargeDumpling
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;
const int INF = 0x7f7f7f7f;
const int MAXN = , MAXM = ;
int need[MAXN], day, p, kd, kf, md, mf;
int Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << ], nxt[MAXM << ], f[MAXM << ], costflow[MAXM << ], ed, S, T;
int x[MAXN], y[MAXN], pre[MAXN];
bool exist[MAXN];
int needflow[MAXN], sumneed = , SS, TT;
inline void addedge(int u, int v, int cap, int val)
{
to[++ed] = v;
nxt[ed] = Head[u];
Head[u] = ed;
f[ed] = cap;
costflow[ed] = val;
to[++ed] = u;
nxt[ed] = Head[v];
Head[v] = ed;
f[ed] = ;
costflow[ed] = - * val;
return;
}
bool BFS()
{
int u;
queue<int>q;
memset(exist, false, sizeof(exist));
memset(lev, , sizeof(lev));
lev[S] = pre[S] = ;
q.push(S);
while (q.size()) {
u = q.front();
q.pop();
exist[u] = false;
for (int i = Head[u]; i; i = nxt[i])
if (f[i] && lev[u] + costflow[i] < lev[to[i]]) {
lev[to[i]] = lev[u] + costflow[i];
pre[to[i]] = i;
if (!exist[to[i]]) {
exist[to[i]] = true;
q.push(to[i]);
}
}
}
memcpy(cur, Head, sizeof(Head));
return lev[T] != INF;
}
int DFS(int u, int maxf)
{
if (u == T || !maxf) {
return maxf;
}
exist[u] = true;
int cnt = ;
for (int &i = cur[u], tem; i; i = nxt[i])
if (f[i] && lev[u] + costflow[i] == lev[to[i]]) {
if (exist[to[i]]) {
continue;
}
tem = DFS(to[i], min(f[i], maxf));
maxf -= tem;
f[i] -= tem;
f[i ^ ] += tem;
cnt += tem;
if (!maxf) {
break;
}
}
if (!cnt) {
lev[u] = - * INF;
}
exist[u] = false;
return cnt;
}
int Augment()
{
int delta = INF;
for (int i = pre[T]; i; i = pre[to[i ^ ]])
if (f[i] < delta) {
delta = f[i];
}
for (int i = pre[T]; i; i = pre[to[i ^ ]]) {
f[i] -= delta;
f[i ^ ] += delta;
}
return delta * lev[T];
}
int MCMF()
{
int ans = ;
memset(exist, false, sizeof(exist));
while (BFS())
//ans+=DFS(S,INF)*lev[T];
{
ans += Augment();
}
return ans;
}
void init(int S1, int T1, int S2, int T2)
{
memset(Head, , sizeof(Head));
ed = ;
S = S1;
T = T1;
SS = S2;
TT = T2;
return;
}
inline void Add(int u, int v, int lowcap, int topcap, int val)
{
addedge(u, v, topcap - lowcap, val);
needflow[u] -= lowcap, needflow[v] += lowcap;
}
void pushdownflow(int n) //after init
{
for (int i = ; i <= n; i++) {
if (needflow[i] < ) {
addedge(i, TT, -needflow[i], );
}
if (needflow[i] > ) {
addedge(SS, i, needflow[i], );
sumneed += needflow[i];
}
}
}
int main()
{
int n;
scanf("%d", &n);
init(n + , n + , n + , n + );
int u, v, k, c;
int sumcost = ;
for (int i = ; i <= n; i++) {
scanf("%d", &k);
for (int j = ; j <= k; j++) {
scanf("%d %d", &v, &c);
Add(i, v, , 0x3f3f3f3f, c);
sumcost += c;
}
}
pushdownflow(n);
for (int i = ; i <= n; i++) {
addedge(i, , 0x3f3f3f3f, );
}
S = SS, T = TT;
int ans = MCMF();
printf("%d\n", ans + sumcost);
return ;
}
BZOJ 3876 统一下界上下界费用流的更多相关文章
- BZOJ 3876 支线剧情 | 有下界费用流
BZOJ 3876 支线剧情 | 有下界费用流 题意 这题题面搞得我看了半天没看懂--是这样的,原题中的"剧情"指的是边,"剧情点"指的才是点. 题面翻译过来大 ...
- 从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流)
从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流) 题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运 ...
- BZOJ 4108: [Wf2015]Catering [上下界费用流]
4108: [Wf2015]Catering 题意:有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些请求.一个搬运工从第i个请 ...
- BZOJ 4213 贪吃蛇 上下界费用流 网络流
https://darkbzoj.cf/problem/4213 https://www.cnblogs.com/DaD3zZ-Beyonder/p/5733326.html 题目描述 dbzoj又崩 ...
- BZOJ 2324 (有上下界的)费用流
思路: 先跑一遍Floyd 更新的时候map[i][j]=map[i][k]+map[k][j] k需要小于i或j 正常建边: 把所有点 拆点-> i,i+n add(x,y,C,E)表示x ...
- BZOJ 2406 二分+有上下界的网络流判定
思路: 求出每行的和 sum_row 每列的和 sum_line 二分最后的答案mid S->i 流量[sum_row[i]-mid,sum_row[i]+mid] i->n+j ...
- bzoj 2324 ZJOI 营救皮卡丘 费用流
题的大概意思就是给定一个无向图,边有权值,现在你有k个人在0点,要求走到n点,且满足 1:人们可以分头行动,可以停在某一点不走了 2:当你走到x时,前x-1个点必须全部走过(不同的人走过也行,即分两路 ...
- [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】
题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...
- BZOJ 1877 晨跑 拆点费用流
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1877 题目大意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧 ...
- BZOJ 4849 [NEERC2016]Mole Tunnels (模拟费用流)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4849 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...
随机推荐
- 【JVM学习笔记】打破双亲委托机制的例子
Tomcat也有自己的类加载器,比如Servlet,这些类加载器就改变了双亲委托模型的默认机制 (该主题有待深入)
- PJzhang:python基础入门的7个疗程-four
猫宁!!! 参考链接:易灵微课-21天轻松掌握零基础python入门必修课-售价29元人民币 https://www.liaoxuefeng.com/wiki/1016959663602400 第十天 ...
- Linux手册页惯用的节名
节 大写 描述 name NAME 显示命令名和一段简短的描述 synopsis SYNOPSIS 命令的语法 confi guration CONFI GURATION 命令配置信息 descrip ...
- 《Linux命令行大全》 笔记记录
1.Shell是什么 2.(文件目录)导航 3.Linux系统 4.操作文件和目录 5.命令的使用 6.重定向 7.透过shell看世界 扩展 引用 8.高级键盘技巧 9.权限 10.进程 11.环境 ...
- 【神经网络与深度学习】【C/C++】比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能
比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能 对于机器学习的很多问题来说,计算的瓶颈往往在于大规模以及频繁的矩阵运算,主要在于以下两方面: (Dense/Sparse) Matr ...
- 2019中山纪念中学夏令营-Day12[JZOJ]
Begin (题目的排序方式:题号) 每期新姿势:(今天推荐一位巨佬)Cefola-Kiroxs 推荐知识:namespace的用法(本赛我的代码中将用到) 2019.08.12[NOIP普及组]模拟 ...
- maven的配置以及使用
1.下载并配置 下载之后解压,并配置系统环境变量(网上的方法很多),配置maven的环境变量之前确保java的环境变量已经配置成功. 2.eclipse安装maven插件 eclipse安装maven ...
- idea 修改pom文件jdk版本回退问题解决
在Java开发是我们大多都使用集成开发环境,像idea和eclipse用的都比较多,在使用idea maven构建项目时,在修改pom.xml文件时,我们的项目jdk版本都会回退,还得每次去设置中修改 ...
- MySQL 的索引是什么?怎么优化?
索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.My ...
- workerman 实践 及 不能多人连接的问题
官网:https://www.workerman.net/ 手册地址:https://www.workerman.net/doc 追加内容: 请在开发前多读读 开发必读http://doc.worke ...