【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】网络扩容