[NOI2009] 变换序列 题解
主要的算法匈牙利二分图匹配和分类讨论连边大家讲的已经很清楚了,本篇来着重讲一下本题难点:使答案字典序最小。
方案:
- 连边的时候,将每个位置作为左部,每个位置的变换值作为右部。将左部每个点的连边的右端点大小按升序排序,最后对每个左部点做 dfs 的时候倒序做。
感性证明:
- 匈牙利的主要流程是:若当前左部将要匹配的点已被匹配,会将这个点的原配匹配到右部点序列中更靠后的点,所以靠后进行匹配的左部点的匹配值的字典序一定会尽量小。那么将右部点升序排列,若进行 dfs 时正序进行,即可求得字典序最大的,反过来,若倒序进行,即可求得字典序最小值。
为什么不能将右部点降序排序之后再正序进行 dfs 呢?
- 此时正序进行 dfs 一定会使得后进行 dfs 的左部点的匹配的字典序更大,但是不能保证先进行 dfs 的左部点的匹配的字典序尽量小。