记$d(x,y)$为$x$到$y$的距离,$cost_{x}=\sum_{i=1}^{n}w_{i}d(x,i)^{\frac{3}{2}}$为$x$的代价

取$C$为足够大量,对于一条边权为$w$的边,在边上新建$wC-1$个点,这些点点权为0(即本身无影响),并将边拆成$wC$段,那么每一段边权为$\frac{1}{C}$

任取(新树中)一条路径$\{a_{1},a_{2},...,a_{l}\}$,则$cost_{a_{i}}$具有凸性

根据凸性定义,即求证$\forall 2\le j\le l-1,2cost_{a_{j}}\le cost_{a_{j-1}}+cost_{a_{j+1}}$

代入其式子,不妨对每一个$i$都保证此性质,也即求证$2d(a_{j},i)^{\frac{3}{2}}\le d(a_{j-1},i)^{\frac{3}{2}}+d(a_{j+1},i)^{\frac{3}{2}}$

对$i$的位置分类讨论:

1.$i$距离$a_{j}$最近,则$d(a_{j},i)\le d(a_{j-1},i),d(a_{j+1},i)$,显然成立

2.$i$不距离$a_{j}$最近,记$x=d(a_{j},i)$,那么即$2x^{\frac{3}{2}}\le (x-\frac{1}{C})^{\frac{3}{2}}+(x+\frac{1}{C})^{\frac{3}{2}}$

令$f(x)=x^{\frac{3}{2}}$,代入并移项,也即$f(x)-f(x-\frac{1}{C})\le f(x+\frac{1}{C})-f(x)$

当$C$足够大时,两者可以看作$\frac{f'(x)}{C}$和$\frac{f'(x+\frac{1}{C})}{C}$,注意到$f'(x)=\frac{3}{2}x^{\frac{1}{2}}$单调递增,即成立

进而考虑其中非新建的点$\{b_{1},b_{2},...,b_{k}\}$,根据$cost_{a_{i}}$的凸性,$cost_{b_{i}}$的形式必然是先严格单调递减、再有若干个相同的数(最小值)、最后严格单调递增(首尾两段允许为空)

由于(原树中)任意一条路径都可以被以此法选择,即所有路径都为此形式


(以下删去上述新建的点,即仍考虑原树)

约定$x$为质心当且仅当$\forall 1\le i\le n,cost_{x}\le cost_{i}$,题目即要找到任意一个质心即可

任取一点$x$,对与$x$相邻的点$y$,至多存在一个$y$满足$cost_{y}<cost_{x}$

(否则任取其中两个记为$y_{1}$和$y_{2}$,考虑$y_{1}$到$y_{2}$的路径即矛盾)

进一步的,再对其分类讨论:

1.如果不存在$y$满足$cost_{y}<cost_{x}$,则对于树上任意一点$z$,考虑其到$x$的路径,由于最后一步仍没有递增,根据路径的形式不难得到$cost_{x}\le cost_{z}$,也即$x$为质心

2.如果存在$y$满足$cost_{y}<cost_{x}$,那么对于以$y$为根时$x$子树中的任意一点$z$,考虑其到$y$的路径,由于最后一步严格单调递减,根据路径的形式不难得到$cost_{y}<cost_{z}$,也即$z$一定不为质心

综上,不难得到下述暴力做法——

初始连通子树$T_{0}=T$,并任取$T_{0}$中一点$x$,求出所有与$x$相邻的点$y$的答案,若不存在$y$满足$cost_{y}<cost_{x}$则$x$为质心,若存在$y$满足$cost_{y}<cost_{x}$(必然唯一)令$T_{0}$为删去$x$后$y$所在的连通块并递归即可(第二种情况,剩下的部分一定不包含质心)

如果令$x$为$T_{0}$中的重心(指通常的定义),那么每一次$T_{0}$的规模至少缩小一半,即至多$o(\log n)$层

但如果暴力计算所有$y$,仍会导致复杂度过高(每一次计算是$o(n)$的),考虑优化:

对于所有边$(x,y,w)$,在边上新建一个点,其点权为0、到$x$距离为1、到$y$距离为$w-1$

由此,只需要求出这些新建点的$cost$即可(注意其并不影响上述分析),维护(以$x$为根后)每一个新建点子树内所有点到其距离的$\frac{3}{2}$次之和、到其距离+2的$\frac{3}{2}$次之和即可

(注意虽然重心一定在$T_{0}$中,但递归的仍是整个$T$)

时间复杂度为$o(n\log n)$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 struct Edge{
5 int nex,to,len;
6 }edge[N<<1];
7 int n,E,rt,x,y,z,a[N],head[N],sz[N],vis[N];
8 void add(int x,int y,int z){
9 edge[E]=Edge{head[x],y,z};
10 head[x]=E++;
11 }
12 void get_sz(int k,int fa){
13 sz[k]=1;
14 for(int i=head[k];i!=-1;i=edge[i].nex)
15 if ((!vis[edge[i].to])&&(edge[i].to!=fa)){
16 get_sz(edge[i].to,k);
17 sz[k]+=sz[edge[i].to];
18 }
19 }
20 void get_rt(int k,int fa,int s){
21 int mx=s-sz[k];
22 for(int i=head[k];i!=-1;i=edge[i].nex)
23 if ((!vis[edge[i].to])&&(edge[i].to!=fa)){
24 get_rt(edge[i].to,k,s);
25 mx=max(mx,sz[edge[i].to]);
26 }
27 if (mx<=(s>>1))rt=k;
28 }
29 double get_s(int k,int fa,int s){
30 double sum=a[k]*(pow(s,1.5)-pow(s+2,1.5));
31 for(int i=head[k];i!=-1;i=edge[i].nex)
32 if (edge[i].to!=fa)sum+=get_s(edge[i].to,k,s+edge[i].len);
33 return sum;
34 }
35 double get_cost(int k,int fa=0,int s=0){
36 double sum=a[k]*pow(s,1.5);
37 for(int i=head[k];i!=-1;i=edge[i].nex)
38 if (edge[i].to!=fa)sum+=get_cost(edge[i].to,k,s+edge[i].len);
39 return sum;
40 }
41 int dfs(int k){
42 get_sz(k,0);
43 get_rt(k,0,sz[k]);
44 int pos=0;
45 double s=1;
46 for(int i=head[rt];i!=-1;i=edge[i].nex){
47 double ss=get_s(edge[i].to,rt,edge[i].len-1);
48 if (ss<s)pos=edge[i].to,s=ss;
49 }
50 if ((!pos)||(get_cost(rt)<=get_cost(pos)))return rt;
51 vis[rt]=1;
52 return dfs(pos);
53 }
54 int main(){
55 scanf("%d",&n);
56 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
57 memset(head,-1,sizeof(head));
58 for(int i=1;i<n;i++){
59 scanf("%d%d%d",&x,&y,&z);
60 add(x,y,z),add(y,x,z);
61 assert(z>=1);
62 }
63 x=dfs(1);
64 printf("%d %.7f\n",x,get_cost(x));
65 return 0;
66 }

[cf566C]Logistical Questions的更多相关文章

  1. CF566C Logistical Questions(10-1)

    题意 \(n\)个点的树,有点权,有边权,\(f(x)=\sum\limits_{i=1}^n w_idis(i,x)^{1.5}\),求最小的\(f(x)\)的\(x\) 单独考虑一条链,顺序编号, ...

  2. 【CF566C】Logistical Questions 点分

    [CF566C]Logistical Questions 题意:给你一棵n个点的树,点有点权,边有边权,两点间的距离为两点间的边权和的$3\over 2$次方.求这棵树的带权重心. $n\le 200 ...

  3. Codeforces 566C - Logistical Questions(点分治)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%% 首先考虑对这个奇奇怪怪的 \(t^{3/2}\) 进行一番观察.考虑构造函数 \(f(x)=ax^{3/2}+b(d-x) ...

  4. Diary / Solution Set -「WC 2022」线上冬眠做噩梦

      大概只有比较有意思又不过分超出能力范围的题叭.   可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics   任意一个 ...

  5. WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】

    http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ...

  6. [译]Node.js Interview Questions and Answers (2017 Edition)

    原文 Node.js Interview Questions for 2017 什么是error-first callback? 如何避免无止境的callback? 什么是Promises? 用什么工 ...

  7. [面试] Design Questions

    Uber总是考一些系统设计的题目,而且重复率很高,汇总了一下地里的所有design的题目,希望可以跟小伙伴们讨论下. Uber Design Questions 1.    让design uber ...

  8. Front End Developer Questions 前端开发人员问题(二)CSS 后续

    问题来源:http://markyun.github.io/2015/Front-end-Developer-Questions/ 31.视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再 ...

  9. WCF学习系列三--【WCF Interview Questions – Part 3 翻译系列】

    http://www.topwcftutorials.net/2012/10/wcf-faqs-part3.html WCF Interview Questions – Part 3 This WCF ...

随机推荐

  1. 带你读Paper丨分析ViT尚存问题和相对应的解决方案

    摘要:针对ViT现状,分析ViT尚存问题和相对应的解决方案,和相关论文idea汇总. 本文分享自华为云社区<[ViT]目前Vision Transformer遇到的问题和克服方法的相关论文汇总& ...

  2. 学习Tomcat(七)之Spring内嵌Tomcat

    前面的文章中,我们介绍了Tomcat容器的关键组件和类加载器,但是现在的J2EE开发中更多的是使用SpringBoot内嵌的Tomcat容器,而不是单独安装Tomcat应用.那么Spring是怎么和T ...

  3. SAE助力南瓜电影7天内全面Severless

    作者:李刚(寻如),阿里云解决方案架构师 南瓜电影APP是国内领先的专注于影视精品化运营的垂直类视频产品,在移动互联网.IPTV.OTT等客户端,面向广大中产阶级精英群体,提供有异于院线及其他视频平台 ...

  4. 高德最佳实践:Serverless 规模化落地有哪些价值?

    作者 | 何以然(以燃) 导读:曾经看上去很美.一直被观望的 Serverless,现已逐渐进入落地的阶段.今年的"十一出行节",高德在核心业务规模化落地 Serverless,由 ...

  5. SimpleDateFormat、Date和String互转

    今天在修改bug时遇到一个查询异常:根据时间段查询的时候,如果查询时间段含12点钟,那么能查到时间段之外的其他数据: 跟踪了数据流动发现,前同事写的程序中,有一处是讲前端传来时间字符串转为Date的一 ...

  6. 初入CTF(封神榜第一关)

    注:网址中的%20是空格的意思 1判断是否存在注入点 构造?id=1 and 1=1(不报错) 构造?id=1 and 1=2(报错或者不显示内容) 报错说明and后面的语句被识别 2判断回显字段的长 ...

  7. 秒级接入、效果满分的文档预览方案——COS文档预览

    一.导语 ​ 说起 Microsoft Office 办公三件套,想必大家都不会陌生,社畜日常的工作或者生活中,多多少少遇到过这种情况: 本地创建的文档换一台电脑打开,就出现了字体丢失.排版混乱的情况 ...

  8. hadoop学习笔记:运行wordcount对文件字符串进行统计案例

    文/朱季谦 我最近使用四台Centos虚拟机搭建了一套分布式hadoop环境,简单模拟了线上上的hadoop真实分布式集群,主要用于业余学习大数据相关体系. 其中,一台服务器作为NameNode,一台 ...

  9. javascript-jquery对象的事件处理

    一.页面加载 1.页面加载顺序:先加载<head></head>之间的内容,然后加载<body></body>之间的内容 直接在head之间书写jque ...

  10. Hive架构及搭建方式

    目录 前言 hive的基础知识 基本架构 metastore 内嵌服务和数据库 内嵌服务 服务和数据库单独部署 hcatalog 客户端 客户端的本地模式 beeline beeline的自动模式 j ...