https://www.luogu.org/problemnew/show/P2127

感觉题解里写的比较复杂,可能自己的想法比较简单一点吧。

看这个图中的的点如果形成一个环,贪心的考虑,要想花费最少,那么我们一定要多次利用最小那个点。

图中来看就是2和6交换,然后2和4交换,然后就交换完了。

然而还有一种换法就是,这个环中最小的点和序列中最小的点先交换,然后在进行环内的操作(就是说先2和1交换...)。

所以对于每个点dfs找到环,然后判断两种方法哪种更优,统计答案。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define LL long long
#define inf 2147483647
LL n,a[],b[],MIN,pos[],siz,sum,minn;
bool vis[];
LL ans;
void dfs(int x)
{
if(vis[x])return ;
sum+=a[x]; //记录环内每个点的总和
siz++; //环内有多少个点
MIN=min(MIN,a[x]); //环内最小值
vis[x]=; //打上标记
dfs(pos[x]); //下一个点
}
int main()
{
scanf("%d",&n);
minn=MIN=inf;
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
b[i]=a[i];
minn=min(minn,a[i]); //记录序列最小值
}
sort(b+,b++n); //排序
for(int i=;i<=n;i++)
pos[i]=lower_bound(b+,b++n,a[i])-b; //记录排序后的位置
for(int i=;i<=n;i++)
{
if(!vis[i])
{
dfs(i);
ans+=min(sum+MIN+minn*(siz+),sum+MIN*(siz-));
/*
方法一:交换序列最小值和环内最小值 + 序列最小值 * 环内点数
方法二:环内最小值*环内点数。
*/
siz=; sum=; MIN=inf;
}
}
printf("%lld",ans);
}

洛谷 P2127 序列排序的更多相关文章

  1. [洛谷P2127] 序列排序

    洛谷题目链接:序列排序 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? ...

  2. 洛谷P2127 序列排序 [贪心]

    题目传送门 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? 输入输出格 ...

  3. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  4. 洛谷P4891 序列 || 膜法阵,魔法阵

    https://www.luogu.org/problemnew/show/P4891 一道几乎一样的题http://210.33.19.103/contest/1130/problem/3 题面ht ...

  5. 洛谷P4891 序列(势能线段树)

    洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...

  6. 【洛谷P2127】序列排序

    题目大意:给定一个长度为 N 的序列,序列中的数两两不相同,每次可以交换序列中任意两个数,代价为这两个数的和,问将序列调整为升序,最少的代价是多少. 题解:考虑这个问题的一个子问题,这个序列为 N 的 ...

  7. P2127 序列排序

    题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? 输入输出格式 输入格式 ...

  8. [UVA1402]Robotic Sort;[SP2059]CERC07S - Robotic Sort([洛谷P3165][CQOI2014]排序机械臂;[洛谷P4402][Cerc2007]robotic sort 机械排序)

    题目大意:一串数字,使用如下方式排序: 先找到最小的数的位置$P_1$,将区间$[1,P_1]$反转,再找到第二小的数的位置$P_2$,将区间$[2,P_2]$反转,知道排序完成.输出每次操作的$P_ ...

  9. 洛谷2085最小函数值(minval) + 洛谷1631序列合并

    题目描述 有n个函数,分别为F1,F2,-,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). ...

随机推荐

  1. VM Fusion配置静态IP和物理机通讯

    Vm虚拟机在WIndow系统上和物理机进行通讯很方便,但是在Mac上简直跟吃了屎一样难用的要死,物理机断了网以后还不能和虚拟机通讯, 如果在windows上做开发,也是简直和吃了屎一样,难用的要屎,这 ...

  2. React中的代码分割

    代码分割想要解决的问题是:经打包工具

  3. 本机和虚拟机互联 设置静态IP vmware 虚拟网络 桥接 NAT 仅主机 自定义

  4. Centos7.x 安装 pptp

    VPN 1:检查是否支持PPTP #返回OK && echo ok ok 2:安装ppp yum install -y ppp 3:导入EPEL源 rpm -ivh http://dl ...

  5. codechef FIBTREE 码农题 线段树 树剖 标记永久化

    好烦啊,调了半天 线段树部分标记比较多,手抖打错了一个 剩下的都是取模的问题 我自己瞎jb推的公式里保留了abs,但是在模意义下是gg的,所以必须把正负区分开 调试的时候一定要注意构造各种形状的树,不 ...

  6. 漫谈Code Review的错误实践

    从刚开始工作时到现在,已经写了7年的代码,大部分代码都被人review过,自己也review了很多人的代码.在上一家公司的时候,我负责的一轮面试是专门进行Code Review的练习和经验谈. 通过在 ...

  7. 省厅报件7.0 读取mdb 生成xml 文件

    using System;using System.Collections.Generic;using System.Data;using System.Data.OleDb;using System ...

  8. Java浏览器下载文件为excel(springMVC方式)

    action中的方法 /** * Excel文件下载处理 * @return */ @RequestMapping("/downloanExcel") public ModelAn ...

  9. MVC FileResult

    你如何将文件传送给用户取决于你最开始如何存储它,如果你将文件存入数据库,你会用流的方式将文件返还给用户,如果你将文件存在硬盘中,你只需要提供一个超链接即可,或者也可以以流的方式.每当你需要以流的方式将 ...

  10. I/O操做总结(四))

    前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 1 2 3 4 5 6 7 8 9 10 11 12 13 ...