UVA-1016

  题目大意:给定一个长度为n的序列,每次操作可以交换任意两个数的位置,代价为两个数的和,求最小代价,将序列排成有序的。

  

  首先,显然需要交换的数一定会形成环:

    

  那么对于每一个环,我们有两种选择: 方案1.自己解决自己 ; 方案2.找人来帮助解决。

    方案1:用环中的最小值去和其他数交换,代价为  环中数字总和+环中最小值 *(环中数字个数 - 2);

    方案2:用整个数列中的最小值去和环中数交换,代价为  环中数字总和+环中最小值 +数列最小值(环中数字个数 + 1)。

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
int n,S,B[1005],P[1005],Fa[1005],Size[1005],Ans;
struct node {int Num,Id;}A[1005];
bool cmp(node x,node y) {return x.Num<y.Num;}
#define gc (p1==p2&&(p2=(p1=buf)+fread(buf,1,65536,stdin),p1==p2)?EOF:*p1++)
char buf[65536],*p1,*p2;
inline int read()
{
char ch;int x(0);
while((ch=gc)<48);
do x=x*10+ch-48;while((ch=gc)>=48);
return x;
}
inline int GetF(int x)
{
if(x==Fa[x]) return x;
return Fa[x]=GetF(Fa[x]);
}
int main()
{
for(register int _=1;;++_)
{
n=read(),Ans=0;if(!n) break;
for(register int i=1;i<=n;++i) B[i]=A[i].Num=read(),A[i].Id=i,Fa[i]=i,Size[i]=1;
sort(A+1,A+n+1,cmp),S=A[1].Num;
for(register int i=1,fx,fy;i<=n;++i)
{
fx=GetF(i),fy=GetF(A[i].Id),P[A[i].Id]=i;
if(fx!=fy) Fa[fy]=fx,Size[fx]+=Size[fy];
}
for(register int i=1,x,y,fa,ans,Min;i<=n;++i)
{
fa=GetF(i);
if(!Size[fa]) continue;
ans=0,Min=1005,x=i,y=Size[fa];
while(Size[fa]) Min=min(Min,B[x]),ans+=B[x],x=P[x],--Size[fa];
Ans+=min(ans+Min+S*(y+1),ans+Min*(y-2));
}
printf("Case %d: %d\n\n",_,Ans);
}
return 0;
}

最新文章

  1. XMPP iOS客户端实现三:登录、注册
  2. Windows Store Apps, Error: The certificate specified has expired.(转)
  3. Windows系统镜像自动添加驱动程序
  4. 2391: Cirno的忧郁 - BZOJ
  5. SaaS系列介绍之十五: SaaS知识重用
  6. hdu 5465 Clarke and puzzle 二维线段树
  7. UVa 567: Risk
  8. $this-&gt;success(&#39;注册成功!&#39;);
  9. JSONObject处理java.util.Date
  10. 利用PowerShell 得到 进程总共占用的内存
  11. abc
  12. 【原创】大数据基础之Benchmark(4)TPC-DS测试结果(hive/hive on spark/spark sql/impala/presto)
  13. CentOS7.2中systemctl的使用
  14. SpringMVC的底层实现
  15. 奈奎斯特定理 and 香农定理
  16. Error:不能将&quot;char*&quot;类型的值分配到&quot;LPSTR&quot;类型的实体 也许 &quot;char*&quot;类型的实参与&quot;LPCWSTR&quot;类型的形参不兼容
  17. C++学习笔记16,C++11中的显式的默认构造函数以及显示删除默认构造函数
  18. Arcobject获得栅格影像的边界
  19. android 7.0 (nougat)的编译优化-ninja
  20. m-orchastration system

热门文章

  1. aes加解密后续问题contentType不是application/json时候后台解析请求对象request
  2. k8s架构与组件详解
  3. ASP.NET Core Web API 教程 - Project Configuration
  4. Mybatis log plugin插件破解修复版 MyBatis Log Plugin License Authorization Failed
  5. JSON,XML设计模式详解
  6. php安装imagick扩展
  7. TP5 pc和wap跳转404
  8. webpack4一些设置
  9. Docker系列(15)- Commit镜像
  10. django 自定义auth中user登陆认证以及自写认证