您的位置:首页 > 理论基础 > 计算机网络

【ZJOI2010】网络扩容

2014-03-15 23:16 267 查看

【ZJOI2010】网络扩容

【题目描述】

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

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

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

【输入】

第一行包含三个整数N,M,K,表示有向图的点数、边数以及所需要增加的流量。

接下来的M行每行包含四个整数u,v,C,W,表示一条从u到v,容量为C,扩容费用为W的边。

【输出】

一行包含两个整数,分别表示问题1和问题2的答案。

【输入样例】

5 8 2

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

【输出样例】

13 19

【数据范围】

30%的数据中,N<=100

100%的数据中,N<=1000,M<=5000,K<=10

【题解】

第一问是裸的最大流,点数也很少,随便一种算法就能过。

第二问是要扩大流量,等价于求一次最小费用最大流,图构造起来不算复杂。首先是保留上一问的残量网络,费用为0(已有的边是免费的),再将刚开始的所有边重新加入一遍,流量为INF(其实为k就够了),最后新建一个源点与原来的源点相连,流量为k,费用为0。新图的最小费用就是扩容的最小费用。

实际上,不必重新加入所有的边,在原残量网络中放大最小割上的边并修改费用也是可行的,只是这道题数据不强,不必麻烦了。

【代码】

第一问Dinic,第二问费用流,几乎0msAC~

【ZJOI2010】网络扩容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: