P2127 序列排序 题解
你们代码都好长啊.jpg
题意
给定无相等元素的
思路
注意到
我们记
容易发现,如果
一个比较显然的贪心:选出每个环中的最小值,与其他点依次交换。
若某个环的点数为
注意到可以先将环中最小值与全局最小值交换,再与其他点依次交换,最后把全局最小值与环中最小值换回来。
若全局最小值为
取两种方案的最小值,答案为
代码
#include <cstdio>
#include <algorithm>
#define F for(int i = 0;i < n;++i)
using namespace std;
int n, m, M = 1e9, a[100050], f[100050], p[100050];long long r, s, q;bool v[100050];
void D(int x) {if(v[x]) return;v[x] = 1;++r;s += a[x];m = min(m, a[x]);D(p[x]);}
int main()
{
scanf("%d", &n);F scanf("%d", a + i), M = min(M, f[i] = a[i]);
sort(f, f + n);F p[i] = lower_bound(f, f + n, a[i]) - f;F if(!v[i])
r = s = 0, m = 1e9, D(i), q += s + min(m * (r - 2), m + M * (r + 1));
return printf("%lld", q), 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具