51nod 1125 交换机器的最小代价

有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有机器变为有序的最小代价。(机器的重量均为正整数)
Input
第1行:1个数N,表示机器及房间的数量。(2 <= N <= 50000)
第2 - N + 1行:每行1个数,表示机器的重量Wi。(1 <= Wi <= 10^9)
Output
输出最小代价。
Input示例
3
3
2
1
Output示例
4

 

一开始以为是一道贼难的题,然后稍微思考了一下发现是sb贪心。

首先我们知道由于机器重量各不相等,所以每台机器最终的位置是确定的,

那么我们肯定只需要把不在最终位置的机器交换。

假如我们把一个机器现在的位置和最终的位置连一条有向边,那么最后这个图就会是由很多个联通块组成,并且每个联通块都是一个环。

我们容易发现对于一个大小为n的环,我们需要交换n-1次,并且每个点都至少要和其他点交换一次。

那么我们让代价最小(即重量最小)的那个交换n-1次(与其他所有点都交换一次),这样其他的点的代价都只有$W_i$,而中联最小的那个代价就是$(n-1) \times W_x$。

posted @ 2017-12-21 17:17  shixinyi  阅读(272)  评论(0编辑  收藏  举报