P4437 [HNOI/AHOI2018] 排列

发布时间 2023-10-13 21:19:44作者: Schucking_Sattin

P4437 [HNOI/AHOI2018] 排列

Solution

\(a_i \to i\) 连边,出现环则无解,否则因为 \(1 \sim n\) 每个点入度为 \(1\),一定会构成森林。

安排点 \(1 \sim n\) 的选取顺序,使得父节点总是比子节点先选。记点 \(i\) 的选取时间为 \(t_i\),则权值和为 \(\sum\limits_{i = 1}^{n}t_{i}w_{i}\)

贪心考虑越小的权值一定越先选。

假设当前 权值最小 的点是 \(u\),其父节点为 \(fa\)

如果 \(fa\) 已选或 \(fa = 0\),则当前直接选 \(u\);否则先将父节点选了之后直接选 \(u\)。换句话说,最优方案下,\(u\) 的位置一定紧接在 \(fa\) 的位置之后

\(u\)\(fa\) 缩成一个节点,划归为一个新的子问题;不同的是,此时有些缩点包含了原树中的多个节点,但 感性理解一下,缩点的权值可以看作其内所有点权的平均值,然后仍然选取点权最小的那个点进行分析。

在对 “感性理解” 的严谨证明之前,且停下来想想 “缩点” 的本质是什么。

假设现有两个缩点分别对应两个有序点集 \(A, B\),大小分别为 \(x, y\)

\(W_{S}\) 表示一个有序集的权值(其定义与原题相同,但与其在排列中的位置无关),即 \(W_{S} = \sum\limits_{i = 1}^{|S|}iw_{S_i}\)

给定初始 \(n\) 个大小为 \(1\)、权值为 \(w_i\) 的有序集,每次合并两个有序集 \(A, B\) 产生一定的代价(其中 \(A\)\(fa\) 所在的有序集,\(B\)\(u\) 所在的有序集)更具体地,这个代价是 \(B\) 中的元素 顺序右移 新增的代价 \(x\sum\limits_{i = 1}^{y}w_{B_i}\)(因为 \(fa\) 必须在 \(u\) 之前,所以 \(A\) 必须在 \(B\) 之前;代价式具体推导见下)。当所有有序集合并为一个大小为 \(n\) 的有序集,位置 \(x\) 上的元素将被它前面的元素都贡献一遍,共贡献 \((x - 1) + 1\) 次(把 \(+1\) 单独列出,表示 \(0\) 号节点)。

而合并的顺序应该怎样决定?这就取决于有序集权值之间的大小关系。需要注意的是,合并过程看似只是 \(u\)\(fa\) 之间的连接,但不要忘了 \(A\) 中可能存在 \(fa\) 的其它子节点,而我们真正要讨论的,是这些子节点之间的选取顺序。而子节点的选取必然在 \(fa\) 之后,所以可以看成子节点代表的有序集的顺序是连续的,所以我们可以直接分析这些子节点代表的有序集之间直接合并的顺序。私以为这一步是极其隐晦的。

接下来具体地分析选取的先后顺序,即阐述为什么可以将缩点的权值视作其内部所有点权的平均值。

对于两个有序集 \(A, B\)\(A\)\(B\) 前和 \(B\)\(A\) 前两种合并方式所得的有序集权值分别为:

\[\begin{aligned} W_{AB} = \sum\limits_{i = 1}^{x}iw_{A_i} + \sum\limits_{i = 1}^{y}(x + i)w_{B_i} = W_{A} + W_{B} + x\sum\limits_{i = 1}^{y}w_{B_i} \\ W_{BA} = \sum\limits_{i = 1}^{y}iw_{B_i} + \sum\limits_{i = 1}^{x}(y + i)w_{A_i} = W_{A} + W_{B} + y\sum\limits_{i = 1}^{x}w_{A_i} \\ \end{aligned} \]

分析两种情况的大小关系:

\[\begin{aligned} W_{AB} - W_{BA} = x\sum\limits_{i = 1}^{y}w_{B_i} - y\sum\limits_{i = 1}^{x}w_{A_i} \\ \end{aligned} \]

稍微化一下就成比较平均值啦!结论就是平均值小的那坨点越先操作越优。

我们直接按这种大小关系排序。对于非兄弟节点代表的有序集之间的比较并没有实际意义,我们只关心兄弟节点代表的有序集向父节点代表的有序集合并的顺序。而由于该比较方式具有传递性,所以可以保证合并顺序处于最优策略。

并查集和优先队列维护一下即可。

好困难的贪心。

本人可能在胡扯,如果大佬看出纰漏请指正QWQ

很久没有这么痛快的思考了。