Gym 101981-I Magic Potion 题解

传送门

题意:有 \(n\) 个勇者和 \(m\) 个怪物,第 \(i\) 个勇者有一个可杀怪物集合 \(M_i\),每个勇者只能杀各自 \(M_i\) 中的一个怪物。
但是你有 \(k\) 瓶魔药,每一瓶都可以让一个勇者多杀一个 \(M_i\) 中的怪物。但是每个勇者只能吃一瓶药。问最多能杀多少个。

考虑让勇者和怪物匹配,匹配上了就表示勇者杀这个怪物。

因为吃药后的勇者可以看作一个新的勇者,所以给每个勇者抽象出一个新的点 "嗑药勇者",每个嗑药勇者都和原来勇者能击杀的怪物一样连边。

但是这样求最大匹配,无法限制 \(k\) 瓶魔药!所以给怪物也抽象出 \(n-k\) 个虚拟怪物,每个虚拟怪物向每个嗑药勇者连边。

在这个图上求最大匹配为 \(a\)\(a-(n-k)\) 就是原来的答案。

当然这题网络流的建模非常简单:新建一个点 \(M\)\(S\)\(M\) 连容量 \(k\) 的,\(M\) 向每个勇者连容量 \(1\) 的。

posted @ 2024-03-18 18:48  FLY_lai  阅读(9)  评论(0编辑  收藏  举报