比赛开始很久了,才想出来是最大权闭合图这么个模型,可以转换成最小割来做
定义一个有向图G = (V, E)的闭合图(closure)是该有向图的一个点集,且该点集的所有出边都还指向该点集。
分析这类模型,有个很重要的特征,满足 对于∀<u, v>∈ E,若有u∈V'成立,必有v∈V'成立 这个条件,这在布尔代数中叫“蕴含”,就表示选择一些点,就必然要选择另外一些点,这样就好比是数学里必要条件的关系,而且是每个点拥有点权,最后求的就是最大权问题。
题意:AbOr要通过girls赚钱,前提是you have all the kinds of gemstones that she like and play with her, then she will help you make some money !这样的话,赚钱和购买宝石之间就具有必要条件的关系,且宝石只要购买一次就行,符合构图方式,这样就可以建图了。
有N个girls(用X代替),M种宝石(用Y代替),S为源,T为汇
建3类边:
1。<S, X, money> money表示对于X这个girl能赚到的钱
2。<X, Y, INF> Y为X喜欢的宝石,这样能保证中间边不会加入最小割的行列
3。<Y, T, price> price表示购买宝石Y的价钱
这样用最大流算法求的最小割mincut
最后所求的最大权ans = 所有正点权之和(所有money之和, price为付出的钱,可以看成拥有负点权) - mincut
这是我做的第二道最大权闭合图,纪念一下下,图论里的建图方式真是奇妙啊。。呵呵