题目描述
有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数,求最大利润
输入输出格式
输入格式:
第一行给出 N,M(1<=N<=1200,1<=M<=1200) 下面将有N组数据。
每组数据第一行给出完成这个任务能赚到的钱(其在[1,5000])及有多少道工序
接下来若干行每行两个数,分别描述完成工序所需要的机器编号及租用它的费用(其在[1,20000]) 最后M行,每行给出购买机器的费用(其在[1,20000])
输出格式:
最大利润
输入输出样例
输入样例#1:
复制
2 3
100 2
1 30
2 20
100 2
1 40
3 80
50
80
110
输出样例#1: 复制
50
建立源点st与汇点ed;类比于 最大权闭合子图;
st 与任务连边,权值为所能赚的钱;
ed 与机器相连,表示购买的花费;
但还有一个限制就是可以租用机器;
在最大权闭合子图中,如果没有该限制,其连边应该为inf的容量;
那么考虑租用,将任务与机器的连边inf改为租金即可;
租用机器的操作只与该任务有关,而与其他无关,所以改成 moneyRent即可;
luogu上面我加了O2优化以及快读才过,不知道我这个dinic为啥会T(已加了当前弧优化还是T)
测试点信息
#1 AC 22ms/24208KB
#2 AC 14ms/26064KB
#3 AC 24ms/24096KB
#4 AC 21ms/24200KB
#5 AC 14ms/25788KB
#6 AC 24ms/24224KB
#7 AC 21ms/24184KB
#8 AC 11ms/24120KB
#9 AC 24ms/24192KB
#10 AC 24ms/24212KB
#11 AC 14ms/26096KB
#12 AC 24ms/24336KB
#13 AC 20ms/24104KB
#14 AC 12ms/24964KB
#15 AC 747ms/39924KB
#16 AC 489ms/33560KB
#17 AC 853ms/64272KB
#18 AC 716ms/39828KB
#19 AC 872ms/69156KB
#20 AC 703ms/69504KB
由几个点都接近900ms了,orz;
#include
#include
#include
#include
#include
#include
#include
#include
EPFL - Fighting