尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CF566C Logistical Questions 题解

CF566C Logistical Questions 题解
📅 发布时间:2026/6/18 19:01:05

\[\]

CF566C Logistical Questions

Problem

给定一棵 \(n\) 个点的树,点权 \(w_i\),边权 \(l_i\)。求点 \(p\),使 \(\sum \operatorname{dist}^{\frac 32}(i, p)\cdot w_i\) 最小。

\(1 \le n \le 2 \times 10^5\),\(0 \le w_i \le 10^8\),\(1 \le l_i \le 1000\)。

Sol

hint:\(\left(d^{\frac 32}\right)'\) 单调递增。

类似于 快递员 的 trick?

考虑对于一个点 \(u\),对于相邻点 \(v_{1..c}\),尝试走一点来判断是否更优。不难证明,若 \(u \to v_k\) 最优,重心一定向 \(v_k\) 移动。于是以 \(u\) 为根进行一次 DFS,求出 \(\sum w\cdot d^{\frac 12}\) 后,对每条 \((u, v_{i})\) 边看看能不能走即可。

这里可能会有一点问题,因为可能这条边左右的点数不同。本来是 \(L' > R'\),这条边走到一半变成 \(L'<R'\) 了,因此不能确定最优位置。但是由于最优位置输出的是点,这两个点都算一遍就行了。

但是可能会移动很多次。点分治即可。时间复杂度:\(O(n\log n)\)。

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define fi first
#define se second
#define pb emplace_back
const int N = 2e5 + 10;
int n, R;
int a[N];
double f[N];
pair<double, int> ans;
pair<double, int> operator+(pair<double, int> a, pair<double, int> b) { return a.fi < b.fi ? a : b; }
vector<pii> e[N];
int mx[N], sz[N], vis[N];
void FindRoot(int u, int ff, int num) {mx[u] = 0, sz[u] = 1;for (auto [v, w] : e[u]) {if (vis[v] || v == ff) continue;FindRoot(v, u, num);sz[u] += sz[v];mx[u] = max(mx[u], sz[v]);}mx[u] = max(mx[u], num - sz[u]);if (mx[R] > mx[u]) R = u;
}
void DFS(int u, int ff, int d) {f[u] = a[u] * sqrt(d);for (auto [v, w] : e[u]) {if (v == ff) continue;DFS(v, u, d + w);f[u] += f[v];}
}
double GetDist(int u, int ff, int d) {double res = a[u] * pow(d, 1.5);for (auto [v, w] : e[u]) {if (v == ff) continue;res += GetDist(v, u, d + w);}return res;
}
void Divide(int u) {ans = ans + make_pair(GetDist(u, 0, 0), u);vis[u] = 1;DFS(u, 0, 0);int p = -1;double nd = 0;for (auto [v, w] : e[u])if (!vis[v] && f[v] > nd)nd = f[v], p = v;if (p == -1) return;R = 0, FindRoot(p, u, sz[p]);Divide(R);
}
int main() {scanf("%d", &n);for (int i = 1; i <= n; i++) scanf("%d", &a[i]);for (int i = 1, a, b, l; i < n; i++) {scanf("%d%d%d", &a, &b, &l);e[a].pb(b, l);e[b].pb(a, l);}ans = { GetDist(1, 0, 0), 1 };mx[0] = n + 1, R = 0, FindRoot(1, 0, n), Divide(R);printf("%d %.8lf\n", ans.se, ans.fi);return 0;
}

相关新闻

  • 含光热电站的综合能源系统运行与规划探索
  • 探索考虑储能设备容量及季节性的电热综合能源系统优化调度
  • 2025义乌华顺拉链公司口碑怎么样?详细分析 - 栗子测评

最新新闻

  • 西安卖黄金总被压价?实测5家正规店,按四维标准筛选就剩这几家 - 西安知道
  • 深度学习在增材制造缺陷检测中的应用与优化
  • pandas多维聚合实战:滚动计算与自定义函数生产级指南
  • 2026年河南食品软包装定制与种子袋生产厂家完全指南:从源头工厂到全国覆盖的深度选型 - 精选优质企业推荐官
  • 等离子处理清洗机主流厂家技术实力实测解析 - 起跑123
  • CNAS实验室认证咨询机构实力排行:五家头部机构盘点 - 起跑123

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号