考虑对于$n-1$个数$a_{i}$,函数$f(x)=\frac{\sum_{i=1}^{n-1}(x-a_{i})^{2}}{n-1}$的最小值恰在$x=\frac{\sum_{i=1}^{n-1}a_{i}}{n-1}$取到(根据二次函数显然),因此题意可以理解为任选实数$b$并最小化$\frac{\sum_{i=1}^{n-1}(b-a_{i})^{2}}{n-1}$(本来要求$b$为平均值)

可以暴力枚举$b$并将边权从$d$变为$(b-d)^{2}$求最小生成树,但由于$b$为实数,并不能直接枚举

(为了方便,以下约定两条边边权若相同,编号小的更小)

对于最小生成树而言,所选的边事实上仅取决于边的大小关系,考虑两条边$i$和$j$(其中$i<j$)满足$i$在$j$前面当且仅当$X\le \lfloor\frac{w_{i}+w_{j}}{2}\rfloor$,以此法即产生了$o(n^{4})$个区间,每一个区间内大小关系都相同

(每一段都是左端点为圆括号,右端点为中括号)

对于每一段,以$b$作为参数来表示边权,比较时使用区间内任意数字即可,最后即求一个二次函数区间(其实也可以忽略区间限制)最小值,即可做到$o(n^{6})$的复杂度,可以通过

(以下可能有一些口胡)

更进一步的,考虑每一次权值变化即将两条边优先级交换,且交换的两边优先级相邻(不妨假设为两边为$i$和$j$,其中交换前$i$优先级较大),此时不难证明——

如果修改最小生成树,则必然是$i$本来在最小生成树中被删除,$j$本来不在最小生成树中被加入(其余边不修改)

(证明考虑kruskal贪心的过程并分类讨论即可)

因此只需要判定能否替换即可,用按秩合并并查集维护,复杂度为$o(n^{4}\log n)$

  1. 1 #include<bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 #define N 25
  4. 4 #define sqr(k) (k)*(k)
  5. 5 struct fun{
  6. 6 double a,b,c,val;
  7. 7 fun(){
  8. 8 a=b=c=val=0;
  9. 9 }
  10. 10 fun(double aa,double bb,double cc,double vall){
  11. 11 a=aa,b=bb,c=cc,val=vall;
  12. 12 }
  13. 13 bool operator < (const fun &k)const{
  14. 14 return val<k.val;
  15. 15 }
  16. 16 fun operator + (const fun &k)const{
  17. 17 return fun(a+k.a,b+k.b,c+k.c,0);
  18. 18 }
  19. 19 double mn(){
  20. 20 return c-sqr(b)/(4*a);
  21. 21 }
  22. 22 }D[N],w[N][N];
  23. 23 vector<double>v;
  24. 24 int n,vis[N];
  25. 25 double ans,d[N][N];
  26. 26 fun calc(){
  27. 27 fun ans;
  28. 28 D[0]=fun();
  29. 29 for(int i=1;i<n;i++)D[i]=fun(0,0,0,1e15);
  30. 30 memset(vis,0,sizeof(vis));
  31. 31 for(int i=0;i<n;i++){
  32. 32 int k=-1;
  33. 33 for(int j=0;j<n;j++)
  34. 34 if ((!vis[j])&&((k<0)||(D[j]<D[k])))k=j;
  35. 35 vis[k]=1;
  36. 36 ans=ans+D[k];
  37. 37 for(int j=0;j<n;j++)D[j]=min(D[j],w[k][j]);
  38. 38 }
  39. 39 return ans;
  40. 40 }
  41. 41 class Egalitarianism2{
  42. 42 public:
  43. 43 double minStdev(vector<int>x,vector<int>y){
  44. 44 n=x.size();
  45. 45 for(int i=0;i<n;i++)
  46. 46 for(int j=0;j<n;j++)d[i][j]=sqrt(1LL*sqr(x[i]-x[j])+1LL*sqr(y[i]-y[j]));
  47. 47 for(int i=0;i<n;i++)
  48. 48 for(int j=i+1;j<n;j++)
  49. 49 for(int ii=i;ii<n;ii++)
  50. 50 for(int jj=ii+1;jj<n;jj++)
  51. 51 if ((i<ii)||(j<jj))v.push_back((d[i][j]+d[ii][jj])/2);
  52. 52 sort(v.begin(),v.end());
  53. 53 double lst=0;
  54. 54 ans=1e15;
  55. 55 for(int i=0;i<v.size();i++)
  56. 56 if ((!i)||(v[i]!=v[i-1])){
  57. 57 for(int j=0;j<n;j++)
  58. 58 for(int k=0;k<n;k++)w[j][k]=fun(1,-2*d[j][k],sqr(d[j][k]),sqr(v[i]-d[j][k]));
  59. 59 ans=min(ans,calc().mn()/(n-1));
  60. 60 lst=v[i];
  61. 61 }
  62. 62 return sqrt(ans);
  63. 63 }
  64. 64 };

[tc13008]Egalitarianism2的更多相关文章

随机推荐

  1. caffe运行错误 target_blobs.blobs_size()与 source_layer.blobs_size() 不一致

    解决方法参考:http://blog.csdn.net/zhangla1220/article/details/50697352 感谢博主!!! 最新下载的caffe代码,运行mnist,训练时可以正 ...

  2. golang []byte和string的高性能转换

    golang []byte和string的高性能转换 在fasthttp的最佳实践中有这么一句话: Avoid conversion between []byte and string, since ...

  3. Redis 深入

    1.缓存更新 一般来说缓存的更新有两种情况: 先删除缓存,再更新数据库. 先更新数据库,再删除缓存. 这两种情况在业界,大家对其都有自己的看法.具体怎么使用还得看各自的取舍.当然肯定会有人问为什么要删 ...

  4. 自动化运维利器Ansible要点汇总

    由于大部分互联网公司服务器环境复杂,线上线下环境.测试正式环境.分区环境.客户项目环境等造成每个应用都要重新部署,而且服务器数量少则几十台,多则千台,若手工一台台部署效率低下,且容易出错,不利后期运维 ...

  5. .Net Core中使用ElasticSearch(一)

    一.安装配置 在官网下载Es,注意版本号,不同大版本号之间差异很大.我安装的是7.14.0版本 1.1 安装成服务 cmd 进入bin目录下执行 elasticsearch-service.bat i ...

  6. QG-2019-AAAI-Improving Neural Question Generation using Answer Separation

    Improving Neural Question Generation using Answer Separation 本篇是2019年发表在AAAI上的一篇文章.该文章在基础的seq2seq模型的 ...

  7. Sequence Model-week3编程题2-Trigger Word Detection

    1. Trigger Word Detection 我们的触发词将是 "Activate.".每当它听到你说 "Activate.",它就会发出 "c ...

  8. logging模块二

    背景,在学习logging时总是遇到无法理解的问题,总结,尝试一下更清晰明了了,让我们开始吧! logging模块常用format格式说明 %(levelno)s: 打印日志级别的数值 %(level ...

  9. Spring Cloud Alibaba整合Sentinel

    Spring Cloud Alibaba 整合 Sentinel 一.需求 二.实现步骤 1.下载 sentinel dashboard 2.服务提供者和消费者引入sentinel依赖 3.配置控制台 ...

  10. FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2

    既然我们已经有了所有的安全流程,就让我们来使用 JWT 令牌和安全哈希密码让应用程序真正地安全. 关于 JWT 它是一个将 JSON 对象编码为密集且没有空格的长字符串的标准.字符串看起来像这样: e ...