bzoj 1834: [ZJOI2010]network 网络扩容 -- 最大流+费用流
1834: [ZJOI2010]network 网络扩容
Time Limit: 3 Sec Memory Limit: 64 MB
Description
Input
Output
Sample Input
1 2 5 8
2 5 9 9
5 1 6 2
5 1 1 8
1 2 8 7
2 5 4 9
1 2 1 1
1 4 2 1
Sample Output
30%的数据中,N<=100
100%的数据中,N<=1000,M<=5000,K<=10
HINT
#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 100000007
#define ll long long
#define N 50010
inline int rd()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int T;
int fro[N],to[N],lj[N],v[N],w[N],fa[N],cnt=,tw[N];
void add(int a,int b,int c,int d){fro[++cnt]=lj[a];to[cnt]=b;fa[cnt]=a;v[cnt]=c;tw[cnt]=d;lj[a]=cnt;}
void ins(int a,int b,int c,int d){add(a,b,c,d);add(b,a,,-d);}
int dis[N],q[N],from[N],ans,h,t;
bool vs[N];
bool bfs()
{
memset(dis,,sizeof(dis));
dis[]=q[]=t=;h=;
int tp;
while(h!=t)
{
tp=q[h++]; if(h==N) h=;
for(int i=lj[tp];i;i=fro[i])
{
if(!dis[to[i]]&&v[i])
{
dis[to[i]]=dis[tp]+;
q[t++]=to[i]; if(t==N) t=;
}
}
}
return dis[T]?:;
}
int dfs(int x,int p)
{
if(x==T) return p;
int tp,res=;
for(int i=lj[x];i;i=fro[i])
{
if(v[i]&&dis[to[i]]==dis[x]+)
{
tp=dfs(to[i],min(p-res,v[i]));
v[i]-=tp;
v[i^]+=tp;
res+=tp;
if(res==p) return p;
}
}
if(res==) dis[x]=;
return res;
}
void dinic(){while(bfs()) ans+=dfs(,inf);}
bool spfa()
{
memset(dis,0x3f,sizeof(dis));
int x;
h=q[]=dis[]=;t=vs[]=;
while(h!=t)
{
x=q[h++]; if(h==N) h=;
for(int i=lj[x];i;i=fro[i])
{
if(v[i]&&dis[to[i]]>dis[x]+w[i])
{
dis[to[i]]=dis[x]+w[i];
from[to[i]]=i;
if(!vs[to[i]])
{
vs[to[i]]=;
q[t++]=to[i];if(t==N) t=;
}
}
}
vs[x]=;
}
return dis[T]<inf;
}
void qaz()
{
int tmp=inf;
for(int i=from[T];i;i=from[fa[i]]) tmp=min(tmp,v[i]);
for(int i=from[T];i;i=from[fa[i]])
{
v[i]-=tmp;v[i^]+=tmp;
ans+=w[i]*tmp;
}
}
void add2(int a,int b,int c,int d){fro[++cnt]=lj[a];to[cnt]=b;fa[cnt]=a;v[cnt]=c;w[cnt]=d;lj[a]=cnt;}
void ins2(int a,int b,int c,int d){add2(a,b,c,d);add2(b,a,,-d);}
void build()
{
int tp=cnt;
for(int i=;i<=tp;i+=) ins2(fa[i],to[i],inf,tw[i]);
}
int n,m,k,a,b,c,d;
int main()
{
T=n=rd();m=rd();k=rd();
for(int i=;i<=m;i++)
{
a=rd();b=rd();c=rd();d=rd();
ins(a,b,c,d);
}
dinic();
printf("%d ",ans);
ans=;build();
ins(,,k,);
while(spfa()) qaz();
printf("%d\n",ans);
return ;
}
bzoj 1834: [ZJOI2010]network 网络扩容 -- 最大流+费用流的更多相关文章
- BZOJ 1834: [ZJOI2010]network 网络扩容(网络流+费用流)
一看就知道是模板题= = ,不说什么了= = PS:回去搞期末了,暑假再来刷题了 CODE: #include<cstdio> #include<iostream> #incl ...
- BZOJ 1834: [ZJOI2010]network 网络扩容 最小费用流_最大流_残量网络
对于第一问,跑一遍最大流即可. 对于第二问,在残量网络上的两点间建立边 <u,v>,容量为无限大,费用为扩充费用. 跑一遍最小费用流即可. Code: #include <vecto ...
- BZOJ 1834 ZJOI2010 network 网络扩展 Dinic+EK费用流
标题效果:给定一个n积分m无向图边,每一方有一个扩展的成本c.代表扩张1费用的交通,寻求最大流量和扩大的最大流量k最小成本 第一问直接运行的最大流量 第二个问题将是连接到一个流的末端每个边缘的起点是正 ...
- BZOJ 1834: [ZJOI2010]network 网络扩容(最大流+最小费用最大流)
第一问直接跑最大流.然后将所有边再加一次,费用为扩容费用,容量为k,再从一个超级源点连一条容量为k,费用为0的边到原源点,从原汇点连一条同样的边到超级汇点,然 后跑最小费用最大流就OK了. ---- ...
- 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 网络扩容(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 网络扩容
[算法]网络流-最大流+最小费用最大流(费用流) [题解] 第一问跑最大流. 第二问: 原始边相当于费用为0的边,再原图(跑过最大流的图)基础上添加带费用的边,容量为k(相当于inf). 第一问最大流 ...
随机推荐
- [\u4e00-\u9fa5] //匹配中文字符
[\u4e00-\u9fa5] //匹配中文字符 ^[1-9]\d*$ //匹配正整数^[A-Za-z]+$ //匹配由26个英文字母组成的字符串^[A-Z]+$ //匹配由26 ...
- VueJS 获取并编译远程模板 解决方案(简单版)
原文链接:https://savokiss.com/tech/vuejs-remote-template.html see: forum
- php菜刀分析学习
这里以eval为例 我们知道, php中的eval能把字符串当代码执行: eval('phpcode'); 注意, 这里的代码要有分号结尾, 我们测试: 我们创建一个最简单的SHELL: <?p ...
- Shell-免键盘输入
Code: #!/bin/sh command1="ssh-keygen -t rsa -f /root/.ssh/id_rsa" expect -c " spawn $ ...
- .NET 处理视频-MediaInfo 获取视频信息
获取视频信息的组件很多,本节介绍的是:MediaFile. 第一步.添加 MediaInfoDotNet 在项目上右键,选择“管理 NuGet 程序包”,浏览以选中 MediaInfoDotNet,然 ...
- Linux删除除了今天以外的文件
[背景] 开发到日志记录功能时,每天都会产生当天的一个日志,久而久之就会产生累积,想要查看的时候,tab键无法自动补全,还要自己额外输入. 比较麻烦. [命令] 经过查找和实验,找到了以下的方法: 1 ...
- Nginx常见错误及处理方法
转载:https://www.cnblogs.com/liyongsan/p/6795851.html 404 bad request 一般原因:请求的Header过大 解决方法:配置nginx.co ...
- linux CentOS 上安装chrome
1.wget http://chrome.richardlloyd.org.uk/install_chrome.sh (用wget下载shell文件)2.chmod u+x install_chr ...
- 理解 pkg-config 工具(linux编译辅助工具)
转:http://www.jb51.net/LINUXjishu/86519.html 你在 Unix 或 Linux 下开发过软件吗?写完一个程序,编译运行完全正常,在你本机上工作得好好的,你放到源 ...
- 禁用Flash P2P上传
Mac OS: sudo bash -c 'echo RTMFPP2PDisable=1 >> /Library/Application\ Support/Macromedia/mms.c ...