Roundgod and Milk Tea[hdu6667] 发表于 2019-12-29 分类于 hdu 题意有 n 个班,每个班 ai 名学生,共做了 bi 杯奶茶。每个学生最多喝一杯奶茶,但不能喝本班的。问最多有多少个学生能喝到奶茶。 n≤106,0≤ai,bi≤109 题解这道题让我学会了 Hall定理。。。 Hall定理详见:Hall定理 首先先建个二分图,每个班的每个学生代表的点都向别班的每杯奶茶连边, 题目转换成了求该二分图的最大匹配。 Hall定理的推论:最大匹配数 = |X|−max(|W|−|Ng(W)|)。 设 Q=|W|−|Ng(W)| , 下面考虑如何求 Q 的最大值。 分三种情况讨论: 1,|W|=0,此时 Q=0。 2,W 内只有第 i 个班的学生,此时 |Ng(W)|=(∑bj)−bi,为了让 |W| 最大化,|W| 应为 ai,此时 Q=ai+bi−(∑bj)。 3,W 内有多个班的学生,此时 |Ng(W)|=∑bi,为了让 |W| 最大化,|W| 应为 ∑ai,此时 Q=(∑ai)−(∑bi)。 所以答案为:(∑ai)−Q。 程序学过编程的人都能写出来,懒得贴了。