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 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...
随机推荐
- office web apps安装部署,配置https,负载均衡(七)配置过程中遇到的问题详细解答
该篇文章,是这个系列文章的最后一篇文章,该篇文章将详细解答owa在安装过程中常见的问题. 如果您没有搭建好office web apps,您可以查看前面的一系列文章,查看具体步骤: office we ...
- 《Java开发手册》
一. 编程规约 (一) 命名风格 [强制]抽象类命名使用Abstract或Base开头:异常类命名使用Exception 结尾:测试类 命名以它要测试的类的名称开始,以Test结尾. [强制]POJO ...
- Spring是什么? 什么是IOC(Inversin of control)? 什么是AOP (Aspect-Oriented Programming)?
spring是一个开源容器框架,可以接管web层.service层.dao层.持久层的组件,spring底下是一个bean工厂,用户产生各种bean,spring可以配置各种bean,和维护bean与 ...
- SQLite扫描
SQLite的扫盲 SQLite的是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite的本身是Ç写的,而且体积很小,所以经常被集成到各种应用程序中,主要在手机的应用中使用. 之前没有遇到过关于 ...
- Tensorf实战第九课(自编码AutoEncoder)
本节我们将了解神经网络进行非监督形式的学习,即autoencoder自编码 假设图片经过神经网络后再输出的过程,我们看作是图片先被压缩然后解压的过程.那么在压缩的时候,原有的图片质量被缩减,解压时用信 ...
- Oracle 看出表结构与属性、表空间设计
1.Oracle 查看表空间 SELECT b.comments as 注释, a.column_name as 列名, a.data_type || '(' || a.data_length || ...
- AIX弱口令解密
1.看下我们的AIX弱口令如果是图中的这种那么我们就可以通过以下脚本来完成转换 2.打开kali给脚本丢进去自动生成下图这种格式,转换完成后保存通过john --w来跑. 脚本文件:保存为.bash ...
- ssh配置互信不成功,两台服务器有一台需要输入密码
在客户现场,某国产平台,配置机器互信时发现,A可以免密访问B,而B不能免密访问A,且B不能免密访问B,进行了下面的几个处理后搞定. 1)确定目录权限:/root/ 755/root/.ssh 700/ ...
- Docker部署前后端项目
本地(ubuntu19.04)安装docker: sudo apt install docker.io SSH连接服务器: 安装Docker: yum update yum -y install do ...
- Dango之模版系统
1.模板渲染 可以传列表,字典,对象等 {{ 变量 }} {% 逻辑 %} -- 标签 urls.py path('login/', views.login), views.py def login( ...