给定一张有向图,每条边都有一个容量C和一个扩容费用W。这里扩容费用是指将容量扩大1所需的费用。

求:

1、在不扩容的情况下,1到N的最大流;

2、将1到N的最大流增加K所需的最小扩容费用。

其中\(n \le 1000,m \le 5000,k \le 10\)

网络流题,复杂度都是没用的了....

第一问就是一个裸的最大流

现在我们考虑第二问QwQ

最小扩容费用,我们是不是可以对于原图中的\(u->v\)的边,添加一条\(u->v\),流量为\(inf\),费用为\(w\)的边,这样就可以实现扩容了。可是我们怎么限制最大流增加k呢?

我们可以新建一个t,然后从原来的\(t\)连向现在的t,费用为0,流量为\(maxflow+k\)的边,然后直接跑费用流即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue> using namespace std; inline int read()
{
int x=0,f=1;char ch=getchar();
while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
while (isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
} const int maxn = 2018;
const int maxm = 1e6+1e2;
const int inf = 1e9; int n,m,k;
int x[maxm],y[maxm],w[maxm],f[maxm];
int point[maxn],nxt[maxm],to[maxm],cost[maxm],flow[maxm];
int pre[maxm];
int dis[maxn],vis[maxn];
int cnt=1;
int anscost,ansflow;
queue<int> q;
int s,t;
int from[maxn]; void addedge(int x,int y,int w,int f)
{
nxt[++cnt]=point[x];
to[cnt]=y;
cost[cnt]=w;
flow[cnt]=f;
pre[cnt]=x;
point[x]=cnt;
} void insert(int x,int y,int w,int f)
{
addedge(x,y,w,f);
addedge(y,x,-w,0);
} void init()
{
cnt=1;
memset(point,0,sizeof(point));
memset(dis,127/3,sizeof(dis));
memset(vis,0,sizeof(vis));
} bool spfa(int s)
{
memset(dis,127/3,sizeof(dis));
memset(vis,0,sizeof(vis));
vis[s]=1;
dis[s]=0;
q.push(s);
while(!q.empty())
{
int x = q.front();
q.pop();
vis[x]=0;
for (int i=point[x];i;i=nxt[i])
{
int p = to[i];
if (flow[i]>0 && dis[p]>dis[x]+cost[i])
{
from[p]=i;
dis[p]=dis[x]+cost[i];
if (!vis[p])
{
q.push(p);
vis[p]=1;
}
}
}
}
if (dis[t]>=dis[t+1]) return false;
else return true;
} void mcf()
{
int x= inf;
for (int i=from[t];i;i=from[pre[i]]) x=min(x,flow[i]);
ansflow+=x;
for (int i=from[t];i;i=from[pre[i]])
{
flow[i]-=x;
flow[i^1]+=x;
anscost+=cost[i]*x;
}
} void solve()
{
while (spfa(s))
{
mcf();
}
}
int main()
{
n=read();
m=read();
k=read();
s=1;
t=n;
for (int i=1;i<=m;i++) x[i]=read(),y[i]=read(),f[i]=read(),w[i]=read();
for (int i=1;i<=m;i++) insert(x[i],y[i],0,f[i]);
solve();
//cout<<ansflow<<endl;
int ff=ansflow;
ansflow=0;anscost=0;
init();
for (int i=1;i<=m;i++) insert(x[i],y[i],0,f[i]),insert(x[i],y[i],w[i],inf);
t=n+1;
insert(n,n+1,0,ff+k);
solve();
cout<<ff<<" "<<anscost;
return 0;
}

bzoj1834 ZJOI2010网络扩容(费用流)的更多相关文章

  1. BZOJ1834[ZJOI2010]网络扩容——最小费用最大流+最大流

    题目描述 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求:  1.在不扩容的情况下,1到N的最大流:  2.将1到N的最大流增加K所需的最小扩容费用 ...

  2. bzoj1834: [ZJOI2010]network 网络扩容 费用流

    bzoj1834 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1.在不扩容的情况下,1到N的最大流: 2.将1到N的最大流增加K所需的最小扩容 ...

  3. [ZJOI2010][bzoj1834] 网络扩容 [费用流]

    题面 传送门 思路 第一问:无脑网络流跑一波 第二问: 先考虑一个贪心的结论:扩容出来的扩容流量一定要跑满 证明显然 因此我们可以把扩容费用可以换个角度思考,变成增加一点流量,花费W的费用 这样,我们 ...

  4. bzoj1834 [ZJOI2010]网络扩容

    Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的 ...

  5. 【BZOJ1834】网络扩容(最大流,费用流)

    [BZOJ1834]网络扩容(最大流,费用流) 题面 Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下 ...

  6. 【题解】Luogu P2604 [ZJOI2010]网络扩容

    原题传送门:P2604 [ZJOI2010]网络扩容 这题可以说是板题 给你一个图,先让你求最大流 再告诉你,每条边可以花费一些代价,使得流量加一 问至少花费多少代价才能使最大流达到k 解法十分简单 ...

  7. 洛谷 P2604 [ZJOI2010]网络扩容 解题报告

    P2604 [ZJOI2010]网络扩容 题目描述 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. ...

  8. [Luogu 2604] ZJOI2010 网络扩容

    [Luogu 2604] ZJOI2010 网络扩容 第一问直接最大流. 第二问,添加一遍带费用的边,边权 INF,超级源点连源点一条容量为 \(k\) 的边来限流,跑费用流. 大约是第一次用 nam ...

  9. [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3330  Solved: 1739 [Subm ...

随机推荐

  1. Springboot自带定时任务实现动态配置Cron参数

    同学们,我今天分享一下SpringBoot动态配置Cron参数.场景是这样子的:后台管理界面对定时任务进行管理,可动态修改执行时间,然后保存入库,每次任务执行前从库里查询时间,以达到动态修改Cron参 ...

  2. 软件测试2021:第一次作业——热身练习(Bug)

    案例一: 问题说明:在大学生服务外包创新创业大赛的注册页面填写密码的时候只有偶数位的密码可以通过验证,而基数位的密码不可以 原因分析:在密码验证的时候多加了一条验证,使得基数位的密码不能都通过验证 案 ...

  3. WHY IS A BYTE 8 BITS? OR IS IT?

    WHY IS A BYTE 8 BITS? OR IS IT? 原文链接:http://www.bobbemer.com/BYTE.HTM I recently received an e-mail ...

  4. Appium问题解决方案(2)- AttributeError:module 'appium.webdriver' has no attribute 'Remote'

    背景 运行脚本的时候,就直接报这个错误了,然后去看了下 appium.webdriver 库 结果发现啥都没有,就知道有问题了,然后一步步排查 步骤一 检查Appium-Python-Client 和 ...

  5. 1.深入TiDB:初见TiDB

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/584 本篇文章应该是我研究的 TiDB 的第一篇文章,主要是介绍整个 ...

  6. CSS导航菜单(一级菜单)

    index.html <div class="nav"> <ul> <li><a href="#">Java&l ...

  7. try/catch捕获处理异常

    1.throws是中断处理,后续代码不能执行 try/catch方法体之后的后续代码有没有异常都可以继续执行: 2.当try方法体中出现异常才会执行catch方法体中代码

  8. Windows中nginx多次启动的问题

    在Windows上做开发环境中的nginx服务器.为了使nginx在后台运行,使用如下命令来启停nginx: cd <nginx安装目录> # 开启nginx并在后台运行 start ng ...

  9. 学习Tomcat(二)之容器概览

    Tomcat容器的Server模块有管理容器的启动和关闭.管理了容器内的服务组件Service.管理了全局JNDI资源的功能,对Tomcat容器的生命周期管理有重要意义.Tomcat的服务组件则是To ...

  10. 【第十八篇】- Maven Eclipse之Spring Cloud直播商城 b2b2c电子商务技术总结

    Maven Eclipse Eclipse 提供了一个很好的插件 m2eclipse ,该插件能将 Maven 和 Eclipse 集成在一起. 在最新的 Eclipse 中自带了 Maven,我们打 ...