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

树形DP扩展

好用的树形DP定理

Kőnig 定理

二分图的最小点覆盖数 \(=\) 二分图的最大匹配数。

Gallai 恒等式

\[|最小点覆盖| + |最大独立集| = |V| \]

树的直径\(\color{white}真的网址在这里!\)

定义

树上最长的不重复经过一个点的路径长度

①二次dfs

解法

证明先不说,先说解法。

先随便找一个点,找到离这个点最远的点,再从这个最远点遍历找到最远点的最远点即可。

代码:


vector<int> g[N];
int maxn = 0, id = 0;void dfs(int u, int fa, int step) {if (maxn < step) maxn = step, id = u;for (auto v : g[u]) {if (v == fa) continue;dfs(v, u, step + 1);}
}

证明:

反证法,分情况:

    • \(u\) 在直径上,设直径是 \(s\)\(t\),离 \(u\) 最远的点是 \(v\)

\(|uv|>|us|\) 那么两边都加上 \(|tu|\) 就是 \(|vt|>|ts|\) 不满足为直径。

  • \(u\) 在直径外,设直径是 \(s\)\(t\),离 \(u\) 最远的点是 \(v\)

  • \(|uv|\)\(|st|\) 有交点为 \(o\),则就是上一种情况。

  • 没有交点的话也是连通的,从连通那里连上也更长。

  1. 从这个端点往外找最远的一个点,一定是直径的另一个端点。

注意

此方法在有负边权时错误!

②树形DP

解法

这个证明就不说了

\(dp_1[u]\):以 \(u\) 为根的子树中,从 \(u\) 出发向下的最长路径。
\(dp_2[u]\):以 \(u\) 为根的子树中,从 \(u\) 出发向下的次长路径(且不与最长路径重合)。

如果 \(len > dp_1[u]\),则\(dp_2[u] = dp_1[u], dp_1[u] = len\)
如果\(len > dp_2[u]\),则\(dp_2[u] = len\)
最后在每次\(dfs\)的最后,取最大值,即:

\[ans = max(dp_1[u],dp_2[u]) \]

代码

自己想。

今日错误点

输出顺序反了,题目要求先输出叶子节点。

http://www.jsqmd.com/news/338703/

相关文章:

  • 2026Q1苏州财税公司排名|资质合规为核心,代理记账按场景选更靠谱 - 品牌智鉴榜
  • 2026 年最新成都公墓代理商五大推荐 专业合规选墓不踩坑 - 深度智识库
  • 破界与共生:HarmonyOS原生应用生态全景图谱与PC时代三重变局
  • 02. 神经网络
  • 10岁小学生自制28元望远镜观察月球
  • 利用多种方法实现SQL行列转换
  • 从欲望、客观到自感:D-O-S模型——一种文明互鉴与数字治理的认知元语言(全)
  • 您已消耗一次 CSP-S 参加机会
  • 夹具状态识别与分类——基于YOLO11-EfficientHead的目标检测实现与性能分析
  • 【读书笔记】《忙碌爸爸也能做好爸爸》
  • 计算机毕设Java基于协同过滤的网上书店推荐系统 基于Java协同过滤算法的在线书店个性化推荐系统设计与实现 Java环境下基于协同过滤的网络书店智能推荐系统研究与开发
  • WPF PGP 2026 R1 线上复刻
  • 毕业设计 深度学习异常流量检测系统(算法+论文)
  • 学习进度 18
  • C++函数进阶:默认参数与函数重载,让你的代码更智能!
  • 生成函数的第一部分
  • 函数探幽(默认参数和函数重载)
  • No143:AI中国故事-对话张载——气本论与AI存在:太虚即气、民胞物与与天人合一
  • 【实操指南】ARP 欺骗攻击:从原理到实战,网络安全小白必看!
  • 霍尔电流传感器在新能源汽车中的应用探讨
  • 你天天用的汉语,竟是科技发展的 “神助攻”?
  • 数字人民币对第三方支付机构有何影响?
  • 漏洞复现-乱复一通 - 实践
  • 斑马专属PS系统课免费分享(视频+素材),让创造力破界而出
  • DINOv2工业缺陷异常检测算特征提取模型介绍
  • java 用队列实现栈
  • [大模型实战 03预备] 云端炼丹房 1:Google Colab 上手指南
  • 2026-02-03 GitHub 热点项目精选
  • 轻量级 Web 应用 —— 把一堆图片按指定频率直接拼成视频,零特效、零依赖、零命令行
  • 国产PLM软件的实施周期多久