题意:有 \(n\) 个勇者和 \(m\) 个怪物,第 \(i\) 个勇者有一个可杀怪物集合 \(M_i\),每个勇者只能杀各自 \(M_i\) 中的一个怪物。
但是你有 \(k\) 瓶魔药,每一瓶都可以让一个勇者多杀一个 \(M_i\) 中的怪物。但是每个勇者只能吃一瓶药。问最多能杀多少个。
考虑让勇者和怪物匹配,匹配上了就表示勇者杀这个怪物。
因为吃药后的勇者可以看作一个新的勇者,所以给每个勇者抽象出一个新的点 "嗑药勇者",每个嗑药勇者都和原来勇者能击杀的怪物一样连边。
但是这样求最大匹配,无法限制 \(k\) 瓶魔药!所以给怪物也抽象出 \(n-k\) 个虚拟怪物,每个虚拟怪物向每个嗑药勇者连边。
在这个图上求最大匹配为 \(a\),\(a-(n-k)\) 就是原来的答案。
当然这题网络流的建模非常简单:新建一个点 \(M\),\(S\) 向 \(M\) 连容量 \(k\) 的,\(M\) 向每个勇者连容量 \(1\) 的。
标签:Potion,匹配,每个,题解,Gym,魔药,勇者,怪物 From: https://www.cnblogs.com/FLY-lai/p/18081185