BZOJ 1562
题意:初始有一个序列$[0,n-1]$升序排列$a_i$,然后给出每个位置的$D=\min(∣T_i−a_i∣,N−∣T_i−a_i∣)$,然后你要找到一组字典序最小的方案$T_i$
显然一个$a_i$对应两个$T$: (i + d) % n + 1, ((i - d) % n + n) % n + 1
构造二分图,左边是$a_i$,右边是$T$,连边,就是求一个最大匹配。
但是匈牙利求不一定字典序最小,我们强制让匈牙利先连序号小的点,这样是不是对的呢?
答案是否定的,因为后面不能匹配就会动到前面的匹配,这样就不最优了。
其实可以倒过来求匈牙利,这样就能保证前面的要最小边能够从后面的修正得到。具体证明可以参见NOI 2009 变换序列 - BYVoid,本文下面也搬运了一份。
这题其实类似于Luogu 2526,都是一个位置有多个选择,并且这些选择都是一个集合的,然后就可以考虑二分图最大匹配。
其实这类问题写暴力时就会发现时间复杂度瓶颈于多个选择。
知识点
原来$0$的改为$1$时注意!x
的判断修改