[AHOI2022] 排列

题目链接

Statement

对于一个长度为 \(n\) 的排列 \(P = (p_1, p_2, \ldots, p_n)\) 和整数 \(k \ge 0\),定义 \(P\)\(k\) 次幂

\[P^{(k)} = \left( p^{(k)}_1, p^{(k)}_2, \ldots, p^{(k)}_n \right), \]

该排列的第 \(i\) 项为

\[p^{(k)}_i = \begin{cases} i, & k = 0, \\ p^{(k - 1)}_{p_i}, & k > 0. \end{cases} \]

容易证明任意排列的任意次幂都是一个排列。

定义排列 \(P\)循环值 \(v(P)\) 为最小的正整数 \(k\) 使得 \(P^{(k + 1)} = P\)

给出一个长度为 \(n\) 的排列 \(A = (a_1, a_2, \ldots, a_n)\),对于整数 \(1 \le i, j \le n\),定义 \(f(i, j)\):若存在 \(k \ge 0\) 使得 \(a^{(k)}_i = j\),则 \(f(i, j) = 0\),否则设排列 \(A_{i j}\) 为将排列 \(A\) 的第 \(i\)\(a_i\) 和第 \(j\)\(a_j\) 交换后得到的排列,则 \(f(i, j) = v(A_{i j})\)

\(\sum_{i = 1}^{n} \sum_{j = 1}^{n} f(i, j)\) 的值。答案可能很大,你只需要输出其对 \(({10}^9 + 7)\) 取模的结果。

对于 \(100 \%\) 的测试数据,\(1 \le T \le 5\)\(1 \le n \le 5 \times {10}^5\)\(1 \le a_i \le n\)

Solution

做这种题肯定要考虑简化操作的。

连边 \(i\rightarrow p_i\),这个就是群论的置换。那么 \(P^k\) 的具体含义就是每个 \(i\)\(k\) 步。这样做之后整个图就是若干不相交的环。显然循环节就是所有置换长度的 \(\mathrm{lcm}\)

考虑 \(f(i,j)=0\) 的充要条件,显然就是 \(i,j\) 在同一个置换。将 \(p_i,p_j\) 调换后,会影响 \(i,j\) 所在的两个环的连通性。具体地,\(i\rightarrow p_i\) 会变成 \(i\rightarrow p_j\)\(j\) 类似。再看眼,这不就是把两个环合并吗。因为 \(p_i,p_j\) 后面连的就不一样。再看眼,这仅与两个环原来的大小有关。

设形成了 \(m\) 个置换,第 \(i\) 个置换的大小为 \(s_i\),那么题目意思就是计算以下柿子的值:

\[\sum_{i=1}^m\sum_{j=i+1}^m s_i\times s_j\times \mathrm {lcm}(s_i+s_j,s_k),k\in[1,m]\setminus \lbrace i,j \rbrace \]

然而你被骗了。环的长度种类是 \(\sqrt n\) 级别的。对于这个性质,考虑反证,如果是大于 \(\sqrt n\) 级别的,总和会 \(>n\)

这个玩意,再搞下就是支持删除两个数,插入一个数并查询 \(\mathrm{lcm}\)。只要暴力不写的太难看就行。

posted on 2023-10-13 19:03  nullptr_qwq  阅读(64)  评论(0)    收藏  举报