BZOJ 1834: [ZJOI2010]network 网络扩容(网络流+费用流)
一看就知道是模板题= = ,不说什么了= =
PS:回去搞期末了,暑假再来刷题了
CODE:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 1010
#define maxm 20010
#define inf 0x7fffffff
using namespace std;
struct edges{
int to,next,cap,dist;bool b;
}edge[maxm];
int n,m,s,t,k,l;
int next[maxn],dist[maxn],way[maxn],h[maxn],p[maxn],gap[maxn];
bool b[maxn];
queue<int> q;
int addedge(int from,int to,int cap,int dist,bool bo){
l++;
edge[l*]=(edges){to,next[from],cap,dist,bo};
edge[l*+]=(edges){from,next[to],,-dist,bo};
next[from]=l*;next[to]=l*+;
return ;
}
bool spfa(){
memset(b,,sizeof(b));
for (int i=;i<=n;i++) dist[i]=inf;
dist[]=;
q.push();
while (!q.empty()){
int u=q.front();q.pop();
b[u]=;
for (int i=next[u];i;i=edge[i].next)
if (edge[i].cap&&dist[edge[i].to]>dist[u]+edge[i].dist) {
dist[edge[i].to]=dist[u]+edge[i].dist;
way[edge[i].to]=i;
if(!b[edge[i].to]){
b[edge[i].to]=;
q.push(edge[i].to);
}
}
}
if (dist[t]==inf) return ;
return ;
}
int mcmf(int cap){
int cost=;
while (spfa()){
int x=n,flow=inf;
while (x!=){
flow=min(flow,edge[way[x]].cap);
x=edge[way[x]^].to;
}
if (flow>=cap) return (cost+=dist[n]*cap);
cost+=dist[n]*flow;
cap-=flow;
x=n;
while(x!=){
edge[way[x]].cap-=flow;
edge[way[x]^].cap+=flow;
x=edge[way[x]^].to;
}
}
return cost;
}
int sap(int u,int flow){
if (u==t) return flow;
int cur=;
for (int i=p[u];i;i=edge[i].next)
if (edge[i].b&&edge[i].cap&&h[u]==h[edge[i].to]+){
int cut=sap(edge[i].to,min(flow-cur,edge[i].cap));
edge[i].cap-=cut;edge[i^].cap+=cut;
p[u]=i;
if ((cur+=cut)==flow ) return flow;
}
if (!(--gap[h[u]])) h[s]=n;
gap[++h[u]]++;
p[u]=next[u];
return cur;
}
int maxflow(){
memset(gap,,sizeof(gap));
memset(h,,sizeof(h));
gap[]=n;
for(int i=;i<=n;i++) p[i]=next[i];
int flow=;
while (h[s]<n) flow+=sap(s,inf);
return flow;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
s=,t=n;
for (int i=;i<=m;i++) {
int x,y,cap,d;
scanf("%d%d%d%d",&x,&y,&cap,&d);
addedge(x,y,cap,,);
addedge(x,y,inf,d,);
}
int ans=maxflow();
printf("%d %d\n",ans,mcmf(k));
return ;
}
|
|
BZOJ 1834: [ZJOI2010]network 网络扩容(网络流+费用流)的更多相关文章
- 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 网络扩容_费用流
BZOJ_1834_[ZJOI2010]network 网络扩容_费用流 题意: 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1.在不扩容的 ...
- 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 网络扩容(最大流+费用流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1834 我又思考人生了T_T,nd的数组开小了,一直wa,调了一个小时才发现啊!!!!!我一直以为我的 ...
- bzoj 1834 [ZJOI2010]network 网络扩容(MCMF)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1834 [题意] 给定一个有向图,每条边有容量C,扩容费用W,问最大流和使容量增加K的最 ...
- bzoj 1834: [ZJOI2010]network 网络扩容
#include<cstdio> #include<iostream> #include<cstring> #define M 100000 #define inf ...
- BZOJ 1834: [ZJOI2010]network 网络扩容 最小费用流_最大流_残量网络
对于第一问,跑一遍最大流即可. 对于第二问,在残量网络上的两点间建立边 <u,v>,容量为无限大,费用为扩充费用. 跑一遍最小费用流即可. Code: #include <vecto ...
随机推荐
- Zynq和microblaze的区别
Zynq钩中PS端的外设之后不需要初始化过程,但是如果在microblaze中连接外设之后需要有初始化过程.
- leetcode day6
[13]Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be with ...
- 最新的thinkphp 后台入口的问题
新的thinkphp后台入口绑定了单独了文件 admin.php 要注意.
- Android px、dp和sp单位区别
[转]http://www.cnblogs.com/bjzhanghao/archive/2012/11/06/2757300.html 在调整布局的时候,某些控件的大小需要设置单位: px: 即像素 ...
- 【Xilinx-Petalinux学习】-03-PetaLinux通过eMMC方式启动
前面说的我的硬件上有一颗eMMC的芯片,型号是MTFC4GACAJCN-4M IT,有4GB的容量. BOOT.bin的文件较小,只有不到3MB,但是image.ub的文件根据不同的需求,将来可能会越 ...
- 笔记整理——C语言-http-1
http 传输原理及格式 - friping - ITeye技术网站 - Google Chrome (2013/4/1 14:02:36) http 传输原理及格式 博客分类: 其他 应用服务器浏览 ...
- pipe管道
回顾: 进程间通信方式: 信号,管道 消息队列,共享内存,信号量 sokcet 信号: 本质就是软中断 signal(信号,函数指针); void func(int); kill(pid,signo) ...
- iOS 之 自动释放池
向一个对象发送autorelease消息时,cocoa会将该对象的一个引用放入最新的自动释放池.作用域结束时,自动释放池会被释放,池中所有的对象也就被释放了.
- 第一部分 记事本搞定第一个C#程序和编译过程剖析
记事本搞定第一个C#程序 进行下面三个步骤:编码,编译和托管运行. 1.记事本进行编码: using System; class Program{ public static void Main() ...
- Spring classPath:用法
http://blog.csdn.net/xing_sky/article/details/8228305 参考文章地址: http://hi.baidu.com/huahua035/item/ac8 ...