题目链接
UVaLive 7264 vjudge今天比赛完也挂了,链接自行找吧。。。
方法:网络流
题目分析
题目大意
一个有向图,表示一个技能表,有先后顺序,比如要获得A技能要先获得B技能以及C技能。但是这个游戏可以“克金”,可以花钱直接获得该技能,也可以花钱取消技能依赖,正常修炼也需要花费一些金钱。现在告诉你n, m, s
表示技能总数,技能依赖数量,以及最终想要获得的技能数量,问想要学会技能s
最少需要花多少钱?
解析
比赛的时候就在犹豫,这题是DP还是网络流,但是DP的状态没法转移。网络流又不知道怎么建图才能把路径上的所有边加起来,做了这题也算有所长进。
建图方式Hihocoder 1252 Kejin Game (最小割)说的很详细了,不再赘述。
这里比较想说一下,为什么要这样建图呢?
其实认真想一下,如果想要学会一个技能,一定选取min(克金, 完成预备技能 + 正常修炼的花费)
。如何做出两者的比较呢?后者可以看作是从两个方向流过来的网络流的和,用克金的路径去约束,这样流过克金的路径的流量一定是克金和从两个方向流过来的流量之和的较小结果,我们跑出来的这样的最大流就形成了全图的最小割,完美的解决了这个问题。
网络流方面太弱,要好好看看网络流的材料了。[网络流建模汇总][Edelweiss]
代码
1 |
|