bzoj 1834: [ZJOI2010]network 网络扩容
#include<cstdio>
#include<iostream>
#include<cstring>
#define M 100000
#define inf 2139062143
using namespace std;
struct data
{
int l,r,w;
}a[M];
int q[M],d[M],head[M],next[*M],u[*M],v[*M],cnt=,n,m,K,ans;
int cnt1=,head1[M],next1[*M],fro[*M],u1[*M],v1[*M],w1[*M],f[M],fr[M];
void jia(int a1,int a2,int a3)
{
cnt++;
u[cnt]=a2;
v[cnt]=a3;
next[cnt]=head[a1];
head[a1]=cnt;
}
void jia1(int a1,int a2,int a3,int a4)
{
cnt1++;
fro[cnt1]=a1;
u1[cnt1]=a2;
v1[cnt1]=a3;
w1[cnt1]=a4;
next1[cnt1]=head1[a1];
head1[a1]=cnt1;
}
bool bfs()
{
memset(d,,sizeof(int)*(*n));
int h=,t=;
q[]=;
d[]=;
for(;h<t;)
{
h++;
int p=q[h];
for(int i=head[p];i;i=next[i])
if(!d[u[i]]&&v[i])
{
d[u[i]]=d[p]+;
if(d[n])
return ;
t++;
q[t]=u[i];
}
}
return ;
}
int dinic(int s,int f)
{
if(s==n)
return f;
int rest=f;
for(int i=head[s];i&&rest;i=next[i])
if(v[i]&&d[u[i]]==d[s]+)
{
int now=dinic(u[i],min(rest,v[i]));
if(!now)
d[u[i]]=;
v[i]-=now;
v[i^]+=now;
rest-=now;
}
return f-rest;
}
bool spfa()
{
memset(d,,sizeof(int)*(*n));
d[]=;
f[]=;
q[]=;
int h=,t=;
for(;h<t;)
{
h++;
int p=q[h];
f[p]=;
for(int i=head1[p];i;i=next1[i])
if(v1[i]&&d[u1[i]]>d[p]+w1[i])
{
d[u1[i]]=d[p]+w1[i];
fr[u1[i]]=i;
if(!f[u1[i]])
{
f[u1[i]]=;
t++;
q[t]=u1[i];
}
}
}
if(d[n]!=inf)
return ;
return ;
}
void mcf()
{
int mx=inf;
for(int i=fr[n];i;i=fr[fro[i]])
mx=min(mx,v1[i]);
for(int i=fr[n];i;i=fr[fro[i]])
{
v1[i]-=mx;
v1[i^]+=mx;
ans+=mx*(w1[i]);
}
}
int main()
{
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<=m;i++)
{
int a3;
scanf("%d%d%d%d",&a[i].l,&a[i].r,&a3,&a[i].w);
jia(a[i].l,a[i].r,a3);
jia(a[i].r,a[i].l,);
}
for(;bfs();)
ans+=dinic(,inf);
printf("%d ",ans);
for(int i=;i<=cnt;i+=)
{
jia1(a[i/].l,a[i/].r,inf,a[i/].w);
jia1(a[i/].r,a[i/].l,,-a[i/].w);
jia1(a[i/].l,a[i/].r,v[i],);
jia1(a[i/].r,a[i/].l,v[i+],);
}
jia1(,,K,);
jia1(,,,);
ans=;
for(;spfa();)
mcf();
printf("%d\n",ans);
return ;
}
一遍最大流,一遍费用流。第一问跑完之后在残余网络建边,单位费用为扩容费用,
bzoj 1834: [ZJOI2010]network 网络扩容的更多相关文章
- BZOJ 1834: [ZJOI2010]network 网络扩容(最大流+最小费用最大流)
第一问直接跑最大流.然后将所有边再加一次,费用为扩容费用,容量为k,再从一个超级源点连一条容量为k,费用为0的边到原源点,从原汇点连一条同样的边到超级汇点,然 后跑最小费用最大流就OK了. ---- ...
- bzoj 1834: [ZJOI2010]network 网络扩容 -- 最大流+费用流
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一 ...
- bzoj 1834 [ZJOI2010]network 网络扩容(MCMF)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1834 [题意] 给定一个有向图,每条边有容量C,扩容费用W,问最大流和使容量增加K的最 ...
- BZOJ 1834 [ZJOI2010]network 网络扩容(费用流)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1834 [题目大意] 给定一张有向图,每条边都有一个容量C和一个扩容费用W. 这里扩容费 ...
- bzoj 1834: [ZJOI2010]network 网络扩容【最大流+最小费用最大流】
第一问直接跑最大流即可.建图的时候按照费用流建,费用为0. 对于第二问,在第一问dinic剩下的残量网络上建图,对原图的每条边(i,j),建(i,j,inf,cij),表示可以用c的花费增广这条路.然 ...
- BZOJ 1834: [ZJOI2010]network 网络扩容 最小费用流_最大流_残量网络
对于第一问,跑一遍最大流即可. 对于第二问,在残量网络上的两点间建立边 <u,v>,容量为无限大,费用为扩充费用. 跑一遍最小费用流即可. Code: #include <vecto ...
- BZOJ 1834: [ZJOI2010]network 网络扩容(网络流+费用流)
一看就知道是模板题= = ,不说什么了= = PS:回去搞期末了,暑假再来刷题了 CODE: #include<cstdio> #include<iostream> #incl ...
- 【BZOJ】1834: [ZJOI2010]network 网络扩容(最大流+费用流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1834 我又思考人生了T_T,nd的数组开小了,一直wa,调了一个小时才发现啊!!!!!我一直以为我的 ...
- 【BZOJ】1834 [ZJOI2010]network 网络扩容
[算法]网络流-最大流+最小费用最大流(费用流) [题解] 第一问跑最大流. 第二问: 原始边相当于费用为0的边,再原图(跑过最大流的图)基础上添加带费用的边,容量为k(相当于inf). 第一问最大流 ...
随机推荐
- Linux_常用命令_03_磁盘/挂载_信息查看
1. 1.1. mount 不带参数的话,显示的是 当前已经挂载的情况 1.2. df 不带参数的话,硬盘分区状况查询 2. 2.1. cat /proc/partitions 2.2. fdisk ...
- 初识redis——mac下搭建redis环境
一.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...
- thinkphp分页显示
先在Common\Comon里建一个function.php公共方法,然后在里面新建一个getpage方法,代码如下: <?php /** * TODO 基础分页的相同代码封装,使前台的代码更少 ...
- Android spinner控件
spinner控件是Android中下拉控件,现在介绍它两种用法.第一种,从资源文件中获取下拉值:第二种,从代码中获取下拉值. 第一种,首先要在资源文件中把值写好: <?xml version= ...
- JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(转载 学习中。。。)
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...
- SO_REUSEADDR 和 SO_REUSEPORT
大部分内容来自stackoverflow上的回答:Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they m ...
- JSON 语法规则详解
JSON 的语法规则十分简单,无论用何种方法总结都只有数条而已,它参考了 C 语言家族的一些习惯,学习起来并不会感到陌生. 回顾JSON 的五点语法 1)- 数组(Array)用方括号("[ ...
- easyui datagrid 设置列宽
<script> $(document).ready(function () { alert("sdf"); ...
- crontab在一秒内刷新多次导致部分脚本不生效的问题分析
版权声明:本文由康中良原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/182 来源:腾云阁 https://www.qclo ...
- 你必须知道的28个HTML5特征、窍门和技术
注意:每周有那么几次,此列表会更新一些新的窍门,最终,本文会成为超级有用的资源.//zxx:丑话说在前头,我可没功夫更新,所以,即使到您女儿出嫁那天,本文还是28项内容 前端的发展如此之迅猛,一不留神 ...