题目背景
题目描述
W 教授正在为国家航天中心计划一系列的太空飞行。每次太空飞行可进行一系列商业性实验而获取利润。现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的集合I={I1,I2,…In}。实验Ej需要用到的仪器是I的子集RjÍI。配置仪器Ik的费用为ck美元。实验Ej的赞助商已同意为该实验结果支付pj美元。W教授的任务是找出一个有效算法,确定在一次太空飞行中要进行哪些实验并因此而配置哪些仪器才能使太空飞行的净收益最大。这里净收益是指进行实验所获得的全部收入与配置仪器的全部费用的差额。
对于给定的实验和仪器配置情况,编程找出净收益最大的试验计划。
输入输出格式
输入格式:
第1行有2 个正整数m和n。m是实验数,n是仪器数。接下来的m 行,每行是一个实验的有关数据。第一个数赞助商同意支付该实验的费用;接着是该实验需要用到的若干仪器的编号。最后一行的n个数是配置每个仪器的费用。
输出格式:
第1 行是实验编号;第2行是仪器编号;最后一行是净收益。
输入输出样例
2 3 10 1 2 25 2 3 5 6 7
1 2 1 2 3 17
Solution
1.判断模型:
对于收益,可以视作一个图的正权边
对于费用,可以看作一个图的负权边
要求最大净利润,就是求正权边之和减去最小割的值
大概证明一下,对于每个实验来说,不选,就是直接割掉这里的对正权收益产生的贡献,用和减去,由于是最小割,那么实验需要的仪器一定不会去割,一定正确
而选了一个实验,就一定要割掉与其相关的所有仪器,就是正权扣除费用
证毕
模型也就是最大权闭合图问题
2.最大权闭合图问题
执行方案如下:
设正权点的集合为V+,负权点的集合为V-。
- s->u,u∈V+,容量为点权的绝对值。
- u->v,(u, v)∈E,容量为inf。
- v->t,v∈V-,容量为点权的绝对值。
求最小割,用正权点减去割的容量即得最大的权。
可行性方面,简单割和闭合图一一对应。设简单割为[S, T],S-{s}即为闭合图中的点。
简单割对应闭合图:反证。假设存在u∈S-{s},v∈T-{t},且(u, v)∈E。因为(u, v)∈E,所以网络N=(V’,
E’)中存在(u, v)∈E’且c(u, v)=inf。又因为u, v分属s, t,所以这条边属于[S, T],与简单割的假设矛盾。
闭合图对应简单割:反证。假设[S, T]不是简单割,那么存在u∈S-{s},v∈T-{t},且c(u, v)=inf。这只会当存在(u, v)∈E时发生,与闭合图的假设矛盾。
数量关系方面,最小割意味着最小化“刨开的正权+保留的负权的绝对值”。用正点权之和去减,得到“保留的正权-保留的负权的绝对值=保留的正权+保留的负权”。
这就是较为严谨的论述了
3.细节
建图的话就是这样:(S,实验).(实验收益)
(实验,所需要的各个仪器).(正无穷),也就是说实验和相关仪器必须连在一起
(仪器,T).(仪器费用)
在此图上跑最大流算法(最大流=最小割)