【AGC038F】 Two Permutations

一个排列可以拆成很多个环,我们设 PiP_i 属于的环为 pip_iQiQ_i 属于的环为 qiq_i

对于一个环,只有两种选择,拆成若干自环或保留原状。

我们发现情况分为 55 种:

  • Pi=Qi=iP_i=Q_i=i,此时必然 Ai=BiA_i=B_i
  • Pi=i,QiiP_i=i,Q_i\ne i,当且仅当 qiq_i 被拆分时 Ai=BiA_i=B_i
  • Pii,Qi=iP_i\ne i,Q_i=i,当且仅当 pip_i 被拆分时 Ai=BiA_i=B_i
  • PiQi,Pii,QiiP_i\ne Q_i,P_i\ne i,Q_i\ne i,当且仅当 pip_iqiq_i 都被拆分时 Ai=BiA_i=B_i
  • Pi=QiiP_i=Q_i\ne i,当且仅当 pip_iqiq_i 都被拆分或都不被拆分时 Ai=BiA_i=B_i

我们设 pip_i 被拆分时在 SS 集合中,qiq_i 被拆分时在 TT 集合中,建出最小割模型。

  • Pi=Qi=iP_i=Q_i=i,必定耗费 11 代价。
  • Pi=i,QiiP_i=i,Q_i\ne iqiq_iTT 集合中耗费 11 代价,SSqiq_i 连边权为 11 的边。
  • Pii,Qi=iP_i\ne i,Q_i=ipip_iSS 集合中耗费 11 代价,pip_iTT 连边权为 11 的边。
  • PiQi,Pii,QiiP_i\ne Q_i,P_i\ne i,Q_i\ne ipip_iSSqiq_iTT 耗费 11 代价,pip_iqiq_i 连边权为 11 的边。
  • Pi=QiiP_i=Q_i\ne ipip_iqiq_i 在不同集合耗费 11 代价,pip_iqiq_i 互连边权为 11 的边。

然后跑最小割即可。 这里简单描述一下最后两种边为什么要这么连,以第四种情况为例,若 SS 能到 pip_iqiq_i 能到 TT,为了割开集合,就必须断这条边,也就是说只有断掉这条边才有可能 pip_iSS 集合中,qiq_iTT 集合中。

因为是最小割,所以第五种情况的边在任何情况下最多只会割掉一个方向,所以代价是 11,没有问题。

然后是复杂度,由于是二分图单位边权,时间复杂度 O(nn)\mathrm O(n\sqrt n)

Submission #55948786 - AtCoder Grand Contest 038