Roundgod and Milk Tea[hdu6667]

题意

有 $n$ 个班,每个班 $a_i$ 名学生,共做了 $b_i$ 杯奶茶。每个学生最多喝一杯奶茶,但不能喝本班的。问最多有多少个学生能喝到奶茶。

$n\leq 10^6,0\leq a_i,b_i\leq 10^9$

题解

这道题让我学会了 Hall定理。。。

Hall定理详见:Hall定理

首先先建个二分图,每个班的每个学生代表的点都向别班的每杯奶茶连边,

题目转换成了求该二分图的最大匹配。

Hall定理的推论:最大匹配数 = $|X|-\max(|W|-|N_g(W)|)$。

设 $Q=|W|-|N_g(W)|$ ,

下面考虑如何求 $Q$ 的最大值。

分三种情况讨论:

1,$|W|=0$,此时 $Q=0$。

2,$W$ 内只有第 $i$ 个班的学生,此时 $|N_g(W)|=(\sum b_j) -b_i$,为了让 $|W|$ 最大化,$|W|$ 应为 $a_i$,此时 $Q=a_i+b_i-(\sum b_j)$。

3,$W$ 内有多个班的学生,此时 $|N_g(W)|=\sum b_i$,为了让 $|W|$ 最大化,$|W|$ 应为 $\sum a_i$,此时 $Q=(\sum a_i)-(\sum b_i)$。

所以答案为:$(\sum a_i)-Q$。

程序

学过编程的人都能写出来,懒得贴了。