首先考虑这个最小操作次数是啥。我们将 i \to p_i 连一条边,形成若干个环,设环数为 r,则为 n - r。每个环是独立的,方案就是每次选择一条边 u \to v,将 v 从环上删掉,若原来 v \to w 则新的环上 u \to w。这样每次操作能归位一个。直到 u \to v 和 v \to u 形成了二元环,仅需一次操作。
考虑最大化得分,即 u \equiv v \pmod n 的次数。我们发现环可以随意断掉一条边变成一个链,会发现这样是不会使答案减小的。假设一对点要通过这条边产生贡献,那么可以在另一边先把环缩掉,使用另一条边。于是我们拍平成一条链,把链上每个点重标号一下变成 1 \to 2 \to \cdots \to m,设第 i 个点原来的标号是 a_i。删点的形式容易考虑一个区间 DP。设 f_{l, r} 表示从 l 到 r 的这条链上删点,最后仅剩了 l 的答案。转移枚举中点 mid,有 f_{l, r} \gets f _ {l, mid - 1} + f _ {mid, r} + [a_l \equiv a_{mid} \pmod n]。那么 f_{1, m} 即为答案。