题意:
让尽可能多的奶牛涂上适合自己的防晒霜
思路:
将所有奶牛和防晒霜分别看成两个集合中的点,如果一头奶牛可以使用某个防晒霜,则在两个点之间连一条边,那么问题就变成二分图求最大匹配了;
根据匈牙利算法的原理,如果一个匹配不存在增广路径,则该匹配是二分图的一个最大匹配。也就是使得最多的奶牛涂上了适合自己的防晒霜。
贪心的策略是:将所有奶牛按照 minSPF 从大到小的顺序排序,然后依次考虑每头奶牛;对于每头奶牛,扫描当前所有能用的防晒霜,选择 SPF 值最大的防晒霜来用(这样能保证最后不存在增广路径,因为每头奶牛用的都是自己范围内最大可能的防晒了,前提是我们得把奶牛按起点从大到小的顺序去遍历选择 );
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
map<int