BZOJ_1834_[ZJOI2010]network 网络扩容_费用流
BZOJ_1834_[ZJOI2010]network 网络扩容_费用流
题意:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
#define N 2050
#define M 60050
#define inf 100000000
#define S (n+1)
#define T (n+2)
int head[N],to[M],nxt[M],flow[M],val[M],path[M],cnt=1;
int n,m,k,Q[N],l,r,dep[N],inq[N];
int xx[M],yy[M],cc[M],ww[M],dis[N];
inline void add1(int u,int v,int f)
{
to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;flow[cnt]=f;
}
inline void add2(int u,int v,int f,int c)
{
to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;flow[cnt]=f;val[cnt]=c;
}
bool bfs()
{
memset(dep,0,sizeof(dep));
l=r=0;
dep[1]=1;
Q[r++]=1;
int i;
while(l^r)
{
int x=Q[l++];if(l==n+1)l=0;
for(i=head[x];i;i=nxt[i])if(!dep[to[i]]&&flow[i])
{
dep[to[i]]=dep[x]+1;
if(to[i]==n)return 1;
Q[r++]=to[i];if(r==n+1)r=0;
}
}
return 0;
}
int dfs(int x,int mf)
{
if(x==n)return mf;
int nf=0;
int i;
for(i=head[x];i;i=nxt[i])if(dep[to[i]]==dep[x]+1&&flow[i])
{
int tmp=dfs(to[i],min(flow[i],mf-nf));
nf+=tmp;
flow[i]-=tmp;
flow[i^1]+=tmp;
if(nf==mf)break;
}
dep[x]=0;
return nf;
}
bool spfa()
{
memset(dis,0x3f,sizeof(dis));
memset(path,0,sizeof(path));
l=r=0;
int i;
Q[r++]=S;dis[S]=0;inq[S]=1;
while(l^r)
{
int x=Q[l++];if(l==n+4)l=0;inq[x]=0;
for(i=head[x];i;i=nxt[i])
{
if(flow[i]>0&&dis[to[i]]>dis[x]+val[i])
{
dis[to[i]]=dis[x]+val[i];
path[to[i]]=i^1;
if(!inq[to[i]])
{
inq[to[i]]=1;
Q[r++]=to[i];
if(r==n+4)r=0;
}
}
}
}
return dis[T]<inf;
}
void mcmf()
{
int mnc=0,mxf=0,i;
while(spfa())
{
int nf=1<<30;
for(i=T;i!=S;i=to[path[i]])
{
nf=min(nf,flow[path[i]^1]);
}
for(i=T;i!=S;i=to[path[i]])
{
flow[path[i]]+=nf;
flow[path[i]^1]-=nf;
mnc+=val[path[i]^1]*nf;
}
mxf+=nf;
}
printf("%d\n",mnc);
}
void dinic()
{
int ans=0,f;
while(bfs())
{
while(f=dfs(1,inf))
ans+=f;
}
k+=ans;
printf("%d ",ans);
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
int i;
for(i=1;i<=m;i++)
{
scanf("%d%d%d%d",&xx[i],&yy[i],&cc[i],&ww[i]);
add1(xx[i],yy[i],cc[i]);
add1(yy[i],xx[i],0);
}
dinic();
cnt=1;
memset(head,0,sizeof(head));
add2(S,1,k,0);
add2(1,S,0,0);
add2(n,T,k,0);
add2(T,n,0,0);
for(i=1;i<=m;i++)
{
add2(xx[i],yy[i],cc[i],0);
add2(yy[i],xx[i],0,0);
add2(xx[i],yy[i],inf,ww[i]);
add2(yy[i],xx[i],0,-ww[i]);
}
mcmf();
}
BZOJ_1834_[ZJOI2010]network 网络扩容_费用流的更多相关文章
- BZOJ 1834 [ZJOI2010]network 网络扩容(费用流)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1834 [题目大意] 给定一张有向图,每条边都有一个容量C和一个扩容费用W. 这里扩容费 ...
- BZOJ1834 [ZJOI2010]network 网络扩容 【最大流,费用流】
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 3394 Solved: 1774 [Subm ...
- 【BZOJ】1834: [ZJOI2010]network 网络扩容(最大流+费用流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1834 我又思考人生了T_T,nd的数组开小了,一直wa,调了一个小时才发现啊!!!!!我一直以为我的 ...
- 2018.10.13 bzoj1834: [ZJOI2010]network 网络扩容(最大流+费用流)
传送门 网络流水题啊. 第一问直接放心跑最大流(本来还以为有什么tricktricktrick). 第二问就直接把原来的边(u,v,c,w)(u,v,c,w)(u,v,c,w)变成(u,v,c,0)( ...
- bzoj 1834: [ZJOI2010]network 网络扩容【最大流+最小费用最大流】
第一问直接跑最大流即可.建图的时候按照费用流建,费用为0. 对于第二问,在第一问dinic剩下的残量网络上建图,对原图的每条边(i,j),建(i,j,inf,cij),表示可以用c的花费增广这条路.然 ...
- 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和一 ...
- [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 3330 Solved: 1739 [Subm ...
- 【BZOJ1834】[ZJOI2010]network 网络扩容 最大流+最小费用流
[BZOJ1834][ZJOI2010]network 网络扩容 Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不 ...
随机推荐
- Numpy快速入门——shape属性,你秒懂了吗
前言 对于学习NumPy(Numeric Python),首先得明确一点是:Numpy 是用来处理矩阵数组的. shape 属性 对于shape函数,官方文档是这么说明: the dimensions ...
- Read程序员的困境有感
看完这篇文章,我真的害怕了,码农遍地都是,我就是,改变从今天做起,不走码农生活 首先, 打造你自己的私人项目.你需要不断地打磨自己的技艺.如果工作本身并不能帮助你做到这一点,就捡起那些你感兴趣的问题, ...
- 点聚weboffice隐藏自带工具栏
webObj = document.getElementById(webofficeID); webObj.ShowToolBar = false; //隐藏weboffice自带工具栏
- Codeforces 623D [Amazing概率题]
很有趣的一道题吖! 做法:贪心+迭代 Sigma(i*(pr[i]-pr[i-1])))=n-sigma(pr[i]), 所以我们贪心地是pr[i]尽可能大. 也就是让pr[i]/pr[i-1]尽可能 ...
- shell脚本头,#!/bin/sh与#!/bin/bash的区别.
因为今天写了个小脚本,死活不成功,总是报文件或者目录不存在,问了一下我们马同学的正常写法,发现只有脚本头的区别,也就是今天本文要讲的#!/bin/sh与#!/bin/bash. 本文参考:https: ...
- fastjson 的使用总结
前言 最近在开发过程中使用了大量的json作为前后端数据交换的方式,由于之前没有对json做过系统的学习,所有在使用过程中查阅了大量的文档与资料,这里主要记录了我在开发后对json以及fastjson ...
- ubuntu 命令整合2
通配符 * 匹配任意多个字符 ?匹配一个任意字符 示例:ls *.txt rm -rf *.txt 文本编辑器 vi.vim 格式:vi 文件名 编辑 vi的三种工作模式 正常模式(启动进入的模式) ...
- Python3之利用Cookie模拟登录
Python3之利用Cookie模拟登录 利用Cookie模拟登录步骤: 1. 在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点" ...
- juniper srx 配置
天涯海角- juniper为人所熟悉的一定是从netscreen开始的,作为一线防火墙品牌,还是有很高的地位.但是以前玩netscreen,都是用的网页版去配置,而且网页版做得很不错.但是现在nets ...
- 【转】mysql索引使用技巧及注意事项
一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...