【AGC038F】 Two Permutations
一个排列可以拆成很多个环,我们设 Pi 属于的环为 pi,Qi 属于的环为 qi。
对于一个环,只有两种选择,拆成若干自环或保留原状。
我们发现情况分为 5 种:
- Pi=Qi=i,此时必然 Ai=Bi。
- Pi=i,Qi=i,当且仅当 qi 被拆分时 Ai=Bi。
- Pi=i,Qi=i,当且仅当 pi 被拆分时 Ai=Bi。
- Pi=Qi,Pi=i,Qi=i,当且仅当 pi 和 qi 都被拆分时 Ai=Bi。
- Pi=Qi=i,当且仅当 pi 和 qi 都被拆分或都不被拆分时 Ai=Bi。
我们设 pi 被拆分时在 S 集合中,qi 被拆分时在 T 集合中,建出最小割模型。
- Pi=Qi=i,必定耗费 1 代价。
- Pi=i,Qi=i,qi 在 T 集合中耗费 1 代价,S 向 qi 连边权为 1 的边。
- Pi=i,Qi=i,pi 在 S 集合中耗费 1 代价,pi 向 T 连边权为 1 的边。
- Pi=Qi,Pi=i,Qi=i,pi 在 S 且 qi 在 T 耗费 1 代价,pi 向 qi 连边权为 1 的边。
- Pi=Qi=i,pi 和 qi 在不同集合耗费 1 代价,pi 和 qi 互连边权为 1 的边。
然后跑最小割即可。 这里简单描述一下最后两种边为什么要这么连,以第四种情况为例,若 S 能到 pi,qi 能到 T,为了割开集合,就必须断这条边,也就是说只有断掉这条边才有可能 pi 在 S 集合中,qi 在 T 集合中。
因为是最小割,所以第五种情况的边在任何情况下最多只会割掉一个方向,所以代价是 1,没有问题。
然后是复杂度,由于是二分图单位边权,时间复杂度 O(nn)。
Submission #55948786 - AtCoder Grand Contest 038