Sol
这道题的建图方法:
- 每个筐拆成三个点分别代表三个位置,三个点两两之间互相连边
- 每个球向它可以放入的筐的三个点都连边
求出这张图的最大匹配,减去球数就是答案。
如果一个筐的三个位置只被球占用了0个或者1个,那么这个筐内的位置就能够再构成一个匹配,对最大匹配产生1的贡献;否则,这个筐内的位置将无法再构成匹配。
为什么能保证一定存在一组最大匹配,所有的球都在匹配中?因为题目保证了合法方案存在,而合法方案一定可以对应到一组匹配。
那么如何确保每个球都在最大匹配中呢?在带花树算法中,优先对球进行bfs,其次再bfs筐。因为整个算法过程中,一个点一旦找到匹配的点了,之后就不会再变成孤立点(虽然它的配偶可能会改变)。