UVA-1016

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

  

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

    

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

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

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

  1. #pragma GCC optimize(2)
  2. #pragma GCC optimize(3)
  3. #include<bits/stdc++.h>
  4. using namespace std;
  5. int n,S,B[1005],P[1005],Fa[1005],Size[1005],Ans;
  6. struct node {int Num,Id;}A[1005];
  7. bool cmp(node x,node y) {return x.Num<y.Num;}
  8. #define gc (p1==p2&&(p2=(p1=buf)+fread(buf,1,65536,stdin),p1==p2)?EOF:*p1++)
  9. char buf[65536],*p1,*p2;
  10. inline int read()
  11. {
  12. char ch;int x(0);
  13. while((ch=gc)<48);
  14. do x=x*10+ch-48;while((ch=gc)>=48);
  15. return x;
  16. }
  17. inline int GetF(int x)
  18. {
  19. if(x==Fa[x]) return x;
  20. return Fa[x]=GetF(Fa[x]);
  21. }
  22. int main()
  23. {
  24. for(register int _=1;;++_)
  25. {
  26. n=read(),Ans=0;if(!n) break;
  27. for(register int i=1;i<=n;++i) B[i]=A[i].Num=read(),A[i].Id=i,Fa[i]=i,Size[i]=1;
  28. sort(A+1,A+n+1,cmp),S=A[1].Num;
  29. for(register int i=1,fx,fy;i<=n;++i)
  30. {
  31. fx=GetF(i),fy=GetF(A[i].Id),P[A[i].Id]=i;
  32. if(fx!=fy) Fa[fy]=fx,Size[fx]+=Size[fy];
  33. }
  34. for(register int i=1,x,y,fa,ans,Min;i<=n;++i)
  35. {
  36. fa=GetF(i);
  37. if(!Size[fa]) continue;
  38. ans=0,Min=1005,x=i,y=Size[fa];
  39. while(Size[fa]) Min=min(Min,B[x]),ans+=B[x],x=P[x],--Size[fa];
  40. Ans+=min(ans+Min+S*(y+1),ans+Min*(y-2));
  41. }
  42. printf("Case %d: %d\n\n",_,Ans);
  43. }
  44. return 0;
  45. }

UVA-1016 Silly Sort的更多相关文章

  1. UVA 1016 - Silly Sort 置换分解 贪心

                                           Silly Sort Your younger brother has an assignment and needs s ...

  2. UVA 11462 Age Sort(计数排序法 优化输入输出)

    Age Sort You are given the ages (in years) of all people of a country with at least 1 year of age. Y ...

  3. UVa 11462 Age Sort

    解题报告:给若干个居民的年龄排序,年龄的范围在1到100之间,输入的总人数在0到200W.这题要注意的输入的文件约有25MB,而内存限制为2MB,所以如果人数是像200W这样多的话,甚至都不能把它们都 ...

  4. 开篇,UVA 755 && POJ 1002 487--3279 (Trie + DFS / sort)

    博客第一篇写在11月1号,果然die die die die die alone~ 一道不太难的题,白书里被放到排序这一节,半年前用快排A过一次,但是现在做的时候发现可以用字典树加深搜,于是乐呵呵的开 ...

  5. COGS 1406. 邻居年龄排序[Age Sort,UVa 11462](水题日常)

    ★   输入文件:AgeSort.in   输出文件:AgeSort.out   简单对比时间限制:1 s   内存限制:2 MB [题目描述] Mr.Zero(CH)喜闻乐见地得到了一台内存大大增强 ...

  6. UVA 10881 Piotr's Ants(等效变换 sort结构体排序)

    Piotr's AntsTime Limit: 2 seconds Piotr likes playing with ants. He has n of them on a horizontal po ...

  7. 1016. Phone Bills (25) -vector排序(sort函数)

    题目如下: A long-distance telephone company charges its customers by the following rules: Making a long- ...

  8. UVA 156:Ananagrams (vector+map+sort)

    题意:一大堆单词中间有空格隔开,以'#'结束输出,问只出现一次的的单词有哪些(如果两个具有相同的长度,相同的字母也算是相同的,不区分大小写,如:noel和lone属于一个单词出现两次).最后按照字典序 ...

  9. Flooded! UVA - 815 (sort排序)

    错了好多遍,不知道为啥出错,如果有大神发现,请求指点!!! 附错误代码(错的不知道怎么回事): #include<iostream> #include<cstdio> #inc ...

随机推荐

  1. python库--sklearn--流程图

  2. 【第二十篇】-Maven IntelliJ之Spring Cloud直播商城 b2b2c电子商务技术总结

    Maven IntelliJ IntelliJ IDEA 已经内建了对 Maven 的支持.我们在此例中使用的是 IntelliJ IDEA 社区版 11.1. IntelliJ IDEA 的一些特性 ...

  3. 对Java的annotation(注解)的认识

    什么是java的annotation(注解) ? 注解的定义(annootation): public @interface TestAnnotation { } 上面的这种形式,便定义了注解是如何定 ...

  4. 动态查看及加载PHP扩展

    在编译并完成 php.ini 的配置之后,我们就成功的安装了一个 PHP 的扩展.不过, PHP 也为我们提供了两个在动态运行期间可以查看扩展状态以及加载未在 php.ini 中进行配置的扩展的函数. ...

  5. Dede后台广告管理模块增加图片上传功能插件

    用户问题:网站广告后台管理非常方便,但是织梦后台的广告管理模块,发布广告时图片没有上传选项,只能用URL地址,很不方便,那么织梦帮就教大家一个方法实现广告图片后台直接上传,非常方便.先给大家看下修改后 ...

  6. Orchar Core 创建一个模块化的ASP.NET Core应用程序

    您将构建什么?您将构建一个模块化的ASP.NET Core MVC Web应用程序,类似于Orchard Core附带的示例"Hello World"应用程序.它包括一个Web应用 ...

  7. Kubernetes-Pod介绍(四)-Deployment

    前言 本篇是Kubernetes第七篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kuberne ...

  8. MSSQL数据库安全实验

    管理SQL Server认证模式 (1)确认 SQL Server 验证 ①在桌面上单击"开始",选择"程序"→"Microsoft SQL Serv ...

  9. Composer基础

    摘要 本文介绍Composer的入门知识,包括require和autoload部分. Java有Maven, Node.js有npm, ROR有gem, 这些语言的程序员在开心地使用包管理工具加速开发 ...

  10. 定要过python二级 第10套

    第一部分 第一题 1. int* 字符串 =几个东西 2. 此题的最开始的疑惑 (1)01 02 03  怎么产生  for 循环 (2)<<< 这个怎么产生 (3)<这个&l ...