Description

给定一棵 nnn 个点的树 TTT,点有点权 aia_iai,边有边权 www.
定义 dist⁡(u,v)\operatorname{dist}(u,v)dist(u,v)u→vu\to vuv 的简单路径上的边权和.
找到一个节点 uuu,使得 W=∑i=1ndist⁡(u,i)32×aiW=\sum\limits_{i=1}^n \operatorname{dist}(u,i)^{\frac{3}{2}}\times a_iW=i=1ndist(u,i)23×ai 最小.
输出 uuuWWW,若有多个 uuu,输出任意一个.

Limitations

1≤n≤2×1051\le n\le 2\times 10^51n2×105
1≤ai≤108,1≤w≤10001\le a_i\le 10^8,1\le w\le 10001ai108,1w1000

Solution

由于带 32\frac{3}{2}23 次方,不能按照一般方法处理.
注意到离真正答案(可能是边上的一点)越近,WWW 越小.
假设当前节点为 uuu,考虑向 u→vu\to vuv 这条边移动 xxx 单位距离,则
W=(∑i∈son⁡(u)ai×(dist⁡(u,i)−x)32)+(∑i∉son⁡(u)ai×(dist⁡(u,i)+x)32)W=(\sum_{i\in \operatorname{son}(u)} a_i\times (\operatorname{dist}(u,i)-x)^{\frac{3}{2}})+(\sum_{i\notin \operatorname{son}(u)} a_i\times (\operatorname{dist}(u,i)+x)^{\frac{3}{2}})W=(ison(u)ai×(dist(u,i)x)23)+(i/son(u)ai×(dist(u,i)+x)23)

对它求导:
W′=−(∑i∈son⁡(u)ai×(dist⁡(u,i)−x)12)+(∑i∉son⁡(u)ai×(dist⁡(u,i)+x)12)W^\prime=-(\sum_{i\in \operatorname{son}(u)} a_i\times (\operatorname{dist}(u,i)-x)^{\frac{1}{2}})+(\sum_{i\notin \operatorname{son}(u)} a_i\times (\operatorname{dist}(u,i)+x)^{\frac{1}{2}})W=(ison(u)ai×(dist(u,i)x)21)+(i/son(u)ai×(dist(u,i)+x)21)

x→0x\to 0x0,则 WWW 的瞬时变化量为:
−2(∑i∈son⁡(u)ai×dist⁡(u,i)12)+(∑i=1nai×dist⁡(u,i)12)-2(\sum_{i\in \operatorname{son}(u)} a_i\times \operatorname{dist}(u,i)^{\frac{1}{2}})+(\sum_{i=1}^n a_i\times \operatorname{dist}(u,i)^{\frac{1}{2}})2(ison(u)ai×dist(u,i)21)+(i=1nai×dist(u,i)21)

WWW 的下凸性,若第一个 i=vi=vi=v 时上述式子 <0<0<0,则 vvv 更优,向 vvv 走.
然而直接做是 O(n2)O(n^2)O(n2) 的,用点分治,从全树的中心出发(不带权),每次选择 vvv 后跳到 vvv 的子树中心,即可优化到 O(nlog⁡n)O(n\log n)O(nlogn).

Code

2.24KB,515ms,40MB  (c++23, msys2, O2)2.24\text{KB},515\text{ms},40\text{MB}\;\texttt{(c++23, msys2, O2)}2.24KB,515ms,40MB(c++23, msys2, O2)

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;using i64 = long long;
using ui64 = unsigned long long;
using i128 = __int128;
using ui128 = unsigned __int128;
using f4 = float;
using f8 = double;
using f16 = long double;template<class T>
bool chmax(T &a, const T &b){if(a < b){ a = b; return true; }return false;
}template<class T>
bool chmin(T &a, const T &b){if(a > b){ a = b; return true; }return false;
}constexpr f8 inf = 1e20;signed main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i++) cin >> a[i];vector<vector<pair<int, int>>> g(n);for (int i = 0, u, v, w; i < n - 1; i++) {cin >> u >> v >> w, u--, v--;g[u].emplace_back(v, w);g[v].emplace_back(u, w);}vector<int> siz(n), cur(n);vector<bool> vis(n);int rt = -1;auto findroot = [&](auto&& self, int u, int fa, int sum) -> void {siz[u] = 1, cur[u] = 0;for (auto [v, w] : g[u]) {if (v == fa || vis[v]) continue;self(self, v, u, sum);siz[u] += siz[v];chmax(cur[u], siz[v]);}chmax(cur[u], sum - siz[u]);if (rt == -1 || cur[u] < cur[rt]) rt = u;};f8 s1, s2;vector<f8> dp(n);auto getdis = [&](auto&& self, int u, int fa, int top, i64 dis) -> void {s1 += a[u] * dis * sqrtl(dis); s2 += a[u] * sqrtl(dis) * 3 / 2;dp[top] += a[u] * sqrtl(dis) * 3 / 2;for (auto [v, w] : g[u]) {if (v == fa) continue;self(self, v, u, top, dis + w);}};pair<int, f8> res{-1, inf};auto solve = [&](auto&& self, int u) -> void {if (vis[u]) return;vis[u] = true;s1 = s2 = 0;for (auto [v, w] : g[u]) {dp[v] = 0;getdis(getdis, v, u, v, w);}if (s1 < res.second) res = {u, s1};for (auto [v, w] : g[u])if (s2 - dp[v] * 2 < 0) {rt = -1;findroot(findroot, v, u, siz[v]); self(self, rt); break;}};findroot(findroot, 0, -1, n);solve(solve, rt);printf("%d %.10lf\n", res.first + 1, res.second);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93189.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93189.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93189.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊天室全栈开发-保姆级教程(Node.js+Websocket+Redis+HTML+CSS)

前言 最近在学习websocket全双工通信&#xff0c;想要做一个联机小游戏&#xff0c;做游戏之前先做一个聊天室练练手。 跟着本篇博客&#xff0c;可以从0搭建一个属于你自己的聊天室。 准备阶段 什么人适合学习本篇文章&#xff1f; 答&#xff1a;前端开发者&#xff0c;有一…

后台管理系统-2-vue3之路由配置和Main组件的初步搭建布局

文章目录1 路由搭建1.1 路由创建(router/index.js)1.2 路由组件(views/Main.vue)1.3 路由引入并注册(main.js)1.4 路由渲染(App.vue)2 element-plus的应用2.1 完整引入并注册(main.js)2.2 示例应用(App.vue)3 ElementPlusIconsVue的应用3.1 图标引入并注册(main.js)3.2 示例应用…

使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期

使用 Let’s Encrypt 免费申请泛域名 SSL 证书&#xff0c;并实现自动续期 目录 使用 Let’s Encrypt 免费申请泛域名 SSL 证书&#xff0c;并实现自动续期 &#x1f6e0;️ 环境准备&#x1f4a1; 什么是 Let’s Encrypt&#xff1f;&#x1f9e0; Let’s Encrypt 证书颁发原…

一键自动化:Kickstart无人值守安装指南

Kickstart文件实现自动安装1. Kickstart文件概述1.1 定义与作用Kickstart文件是Red Hat系Linux发行版&#xff08;如RHEL、CentOS、Fedora&#xff09;用于实现自动化安装的配置文件&#xff0c;采用纯文本格式保存。它通过预设安装参数的方式&#xff0c;使系统安装过程无需人…

深度解读 Browser-Use:让 AI 驱动浏览器自动化成为可能

目录 一、什么是 Browser-Use&#xff1f; 二、Browser-Use 的核心功能 1. AI 与浏览器的链接桥梁 2. 无代码 / 低代码操作界面 3. 支持多家 LLM 4. 开发体验简洁 可快速上手 三、核心价值与适用场景 四、与 Playwright 的结合使用 五、总结与展望 https://github.com…

React.memo、useMemo 和 React.PureComponent的区别

useMemo 和 React.memo 都是 React 提供的性能优化工具&#xff0c;但它们的作用和使用场景有显著不同。以下是两者的全面对比&#xff1a; 一、核心区别总结特性useMemoReact.memo类型React Hook高阶组件(HOC)作用对象缓存计算结果缓存组件渲染结果优化目标避免重复计算避免不…

Lumerical INTERCONNECT ------ CW Laser 和 OPWM 组成的系统

Lumerical INTERCONNECT ------ CW Laser 和 OPWM 组成的系统 引言 正文 引言 这里我们来简单介绍一下 CW Laser 与 OSA 组成的简单系统结构的仿真。 正文 我们构建一个如下图所示的仿真结构。 我们将 CWL 中的 power 设置为 1 W。 然后直接运行仿真查看结果如下: 虽然 …

想涨薪30%?别只盯着大厂了!转型AI产品经理的3个通用方法,人人都能学!

在AI产品经理刚成为互联网公司香饽饽的时候&#xff0c;刚做产品1年的月月就规划了自己的转型计划&#xff0c;然后用3个月时间成功更换赛道&#xff0c;转战AI产品经理&#xff0c;涨薪30%。 问及她有什么上岸秘诀&#xff1f;她也复盘总结了3个踩坑经验和正确路径&#xff0c…

基于Hadoop的全国农产品批发价格数据分析与可视化与价格预测研究

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍每文一语有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 随着我国农业数字化进程的加快&#xff0c;农产品批发市场每天都会产生海量的价格…

STM32在使用DMA发送和接收时的模式区别

在STM32的DMA传输中&#xff0c;发送使用DMA_Mode_Normal而接收使用DMA_Mode_Circular的设计基于以下关键差异&#xff1a;1. ‌触发机制的本质区别‌‌发送方向&#xff08;TX&#xff09;‌&#xff1a;由USART的‌TXE标志&#xff08;发送寄存器空&#xff09;触发‌&#x…

【秋招笔试】2025.08.15饿了么秋招机考-第三题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 03. A先生的商贸网络投资 问题描述 A先生是一位精明的商人,他计划在 n n n 个城市之间建立商贸网络。目前有 m m

Socket 套接字的学习--UDP

上次我们大概介绍了一些关于网络的基础知识&#xff0c;这次我们利用编程来深入学习一下一&#xff1a;套接字Socket1.1什么是Socketsocket API 是一层抽象的网络编程接口,适用于各种底层网络协议,如 IPv4、IPv6,. 然而, 各种网络协议的地址格式并不相同。1.2套接字的分类套接字…

AI - MCP 协议(一)

AI应用开发的高级特性——MCP模型上下文协议&#xff0c;打通AI与外部服务的边界。 ************************************************************************************************************** 一、需求分析 当你的AI具备了RAG的能力&#xff0c;具备了调用工具的…

在es中安装kibana

一 安装 1.1 验证访问https的连通性 # 测试 80 端口&#xff08;HTTP&#xff09; curl -I -m 5 http://目标IP:端口号 说明&#xff1a; -I&#xff1a;仅获取 HTTP 头部&#xff08;Head 请求&#xff09;&#xff0c;不下载正文&#xff0c;减少数据传输。 -m 5&#x…

嵌入式开发学习———Linux环境下网络编程学习(二)

UDP服务器客户端搭建UDP服务器代码#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h>#define PORT 8080 #define BUFFER_SIZE 1024int main() {int sockfd;char buffer[BUFFER_SIZE…

UVa1465/LA4841 Searchlights

UVa12345 UVa1465/LA4841 Searchlights题目链接题意输入格式输出格式分析AC 代码题目链接 本题是2010年icpc亚洲区域赛杭州赛区的I题 题意 在一个 n 行 m 列&#xff08;n≤100&#xff0c;m≤10 000&#xff09;的网格中有一些探照灯&#xff0c;每个探照灯有一个最大亮度 k&…

详解区块链技术及主流区块链框架对比

文章目录一、区块链技术栈详解二、主流区块链框架对比1. 公有链&#xff08;Public Blockchain&#xff09;2. 联盟链&#xff08;Consortium Blockchain&#xff09;3. 私有链&#xff08;Private Blockchain&#xff09;三、技术选型建议1. 按需求选择框架2. 开发工具与生态四…

大模型 + 垂直场景:搜索 / 推荐 / 营销 / 客服领域开发有哪些新玩法?

技术文章大纲&#xff1a;大模型 垂直场景的新玩法大模型与搜索领域的结合大模型在搜索领域的应用可以显著提升搜索结果的准确性和用户体验。利用大模型进行语义理解和上下文关联&#xff0c;能够实现更精准的意图识别。结合知识图谱和动态索引优化&#xff0c;可以增强长尾查…

p5.js 3D盒子的基础用法

点赞 关注 收藏 学会了 如果你刚接触 p5.js&#xff0c;想尝试 3D 绘图&#xff0c;那么box()函数绝对是你的入门首选。它能快速绘制出 3D 长方体&#xff08;或正方体&#xff09;&#xff0c;配合简单的交互就能做出酷炫的 3D 效果。本文会从基础到进阶&#xff0c;带你吃…

【动态规划 完全背包 卡常】P9743 「KDOI-06-J」旅行|普及+

本文涉及知识点 C动态规划 完全背包 C记忆化搜索 「KDOI-06-J」旅行 题目描述 小 C 在 C 国旅行。 C 国有 nmn\times mnm 个城市&#xff0c;可以看做 nmn\times mnm 的网格。定义 (i,j)(i,j)(i,j) 表示在网格中第 iii 行第 jjj 列的城市。 该国有 222 种交通系统&#x…