解法:一眼看去,真的太像最大权闭合子图了。但是分析一下发现,这道题的药材是没有费用的,最重要的是,题目要求所用药和药材的数量要一样。这可真的是难倒我了。看了一发别人的解法才发现太妙了。
对于网络流二十四题中的《太空飞行计划》,这是一道最大权闭合子图的经典题,这道题中启用一个方案获利x元,但是要花y元买设备。我们可以这样看,方案启动越多越好,先把钱拿了,这时候去买设备,如果买设备的费用大于所给的启动资金,那么就相当于这个方案自动被否决了,因为源点到方案连一条流量为x的边,设备到汇点各自连各自的花费作为流量,顶多你也只能把这启动资金全部用掉,这样我是不亏也不赚的,相当于这个方案就没了。
那么对于这道题,我们既然要使得药减肥的功效体现出来,我们可以把它放在一个很大的数字里面,这样就可以做最大权闭合子图了。和上面一样,我们令要和药材连的边都是INF,药材和汇点连的边都是INF,让源点和药连的边为INF - cost,这样最坏的情况就是比如样例中药1 2和药材1 2,按这样建图算了算,只能跑出INF * 2 - 10的流量,跑不满,那么原来的流量也是2 * INF - 10,一相减就抵消了。对于药3和药材3则直接是撑死了,就变成了INF + 3 - INF = 3,这样就能得到一个减肥的功效了。
代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include