当前位置: 首页 > news >正文

AcWing 1073 树的中心 树形dp (详解)

这道题目非常有新意,在过去,我们通常先访问子节点去更新父节点的状态,但是这道题我们还需要从父节点去更新子节点。

我们可以想象为向上和向下两个方向,我们任取一点,先向下走,再回来更新上面的点,这样我们就能得出向下的最长距离和次长距离,同时记录最长距离是走哪个点获得的。

然后我们再次深搜,对每个点用这个点去更新他所有子节点,因为他的子节点的最大向上值就是他的最大向上值或者向下最长距离或者次长距离加上这两点间的距离。

代码

#include <bits/stdc++.h>using namespace std;const int N = 100010, INF = 0x3f3f3f3f;int n, res = INF;int h[N], e[N], ne[N], w[N], idx;int d1[N], d2[N], s[N], up[N];void add(int a, int b, int c)
{e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx ++;
}void dfs1(int u, int f)
{for (int i = h[u]; i != -1; i = ne[i]){int j = e[i];if (j == f) continue;dfs1(j, u);if (d1[j] + w[i] >= d1[u]){s[u] = j;d2[u] = d1[u];d1[u] = d1[j] + w[i];}else if (d1[j] + w[i] >= d2[u]){d2[u] = d1[j] + w[i];}}
}void dfs2(int u, int f)
{for (int i = h[u]; i != -1; i = ne[i]){int j = e[i];if (j == f) continue;if (s[u] == j) up[j] = w[i] + max(up[u], d2[u]);else up[j] = w[i] + max(up[u], d1[u]);dfs2(j, u);}
}int main()
{cin >> n;memset(h, -1, sizeof h);for (int i = 1; i < n; i ++ ){int a, b, c;cin >> a >> b >> c;add(a, b, c), add(b, a, c);}dfs1(1, -1);dfs2(1, -1);for (int i = 1; i <= n; i ++ ) res = min(res, max(up[i], d1[i]));cout << res << endl;return 0;
}

http://www.lryc.cn/news/476782.html

相关文章:

  • modelscope下载Qwen2.5 72B 模型方法
  • 重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository
  • 为什么说模拟电路的难点就在开通过程和关断过程?难在什么地方?
  • CubeIDE BUG-project‘hello‘has no explict encoding set hello
  • 在线PDF转图片网站
  • ps和top的区别
  • 自动驾驶上市潮中,会诞生下一个“英伟达”吗?
  • CSS 计数器:深入解析与高级应用
  • 【真题笔记】15年系统架构设计师要点总结
  • 斗破C++编程入门系列之三十九:多态性:纯虚函数和抽象类(四星斗师)
  • 目前美国的互联网环境
  • 从最小作用量原理推导牛顿三大定律
  • 【系统集成项目管理工程师教程】第4章 信息系统架构
  • docker下迁移elasticsearch的问题与解决方案
  • 占地1.1万平,2亿投资的智能仓储系统:高架库、AGV、码垛机器人……
  • 一个小程序如何对接多个收款账户?
  • L2G4000 InternVL 部署微调实践闯关任务
  • asynDriver-6-端口驱动
  • [免费]基于Python的Django+Vue3在线考试系统【论文+源码+SQL脚本】
  • Python使用爬虫
  • CommunityToolkit.Mvvm如何使用
  • Python小游戏20——超级玛丽
  • 配置文件格式(xml、properties、yml/yaml)
  • CentOS 7 软件/程序安装示例
  • Python绘制正弦函数图形
  • 【LVGL-列表部件 lv_list_create】
  • 【P2-6】ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——UDP数据透传
  • 从零学习大模型(十)-----剪枝基本概念
  • Jest进阶知识:模拟 ES6 类 - 掌握类的依赖模拟与方法监听技巧
  • 前端Nginx的安装与应用