题意:给出两个长为n序列,每次可以交换上下对应两个元素。求最少几次操作后可以使得两个序列都是n的排列,并输出操作序号。
解0.25:考虑将1-n排成两列,在ai,bi之间连一条从左向右的边。如果符合要求,那么这张二分图应该刚好为1对1的状态。也就是如果一个点有两条出边,那一定要改一条。
解0.5:考虑把两列点变成一列,连有向边,从上到下。易得当有解时所有数字恰好出现两遍,也就是形成一个环。现在要改变最少的边的方向,使得这个环首尾相连。
解1:开始看题解。题解从最直观的出发,如果一行有两个一样的,那肯定有一个要换掉,符合2-sat。回忆(现查)一下2-sat的建图方式:选a必选b,连边,也就是上下对应两个连边。a和b不能同时存在,a和非b连边,好了跑2-sat吧。
解2:但是2-sat很难写(对我来说),还好这题的边都是双向边,如果要维护一个连通块的话,用扩展域并查集就可以了。然后考虑输出方案,遍历每个连通块,找x和x+n中较小的那个。