思路:
考虑往柱子上一个个加球, 这样就只需考虑每个球与之前的球的关系
对于放进去的球, 有两种方案:
1. 单独放在一个柱子上
2.放在一个球的后面
如果选择方案2, 放进去的球只能放在一个球后面, 我们可以尝试使用二分图匹配解决
将一个球分割为两个点u和u’, 所有的u结点为X集合, u’结点为Y集合
如果球v可以放在u的后面, 则连一条边<u,v’>
每加入一个球重新构图, 求最大匹配, 如果匹配数没有增加, 则加一个柱子, 直到不能再加为止, 则答案为加入球数-1(因为最后一个球不能加进去)
输出的话, 建一个数组, 表示某个球的下一个球, 如果匹配数增加则刷新该数组(防止最后那个不能添加的球干扰输出)
代码:
使用网络流求解二分图匹配
1 |
|