0%

UOJ171 【WC2016】挑战NPC

Sol

这道题的建图方法:

  1. 每个筐拆成三个点分别代表三个位置,三个点两两之间互相连边
  2. 每个球向它可以放入的筐的三个点都连边

求出这张图的最大匹配,减去球数就是答案。

如果一个筐的三个位置只被球占用了0个或者1个,那么这个筐内的位置就能够再构成一个匹配,对最大匹配产生1的贡献;否则,这个筐内的位置将无法再构成匹配。

为什么能保证一定存在一组最大匹配,所有的球都在匹配中?因为题目保证了合法方案存在,而合法方案一定可以对应到一组匹配。

那么如何确保每个球都在最大匹配中呢?在带花树算法中,优先对球进行bfs,其次再bfs筐。因为整个算法过程中,一个点一旦找到匹配的点了,之后就不会再变成孤立点(虽然它的配偶可能会改变)。

Code

link