树的直径_解题技巧
性质
多条直径必相交于一点或一条公共路径。
任意两个同一侧的直径端点到相同直径分叉点的距离均相等。
直径一定是最长边。
模板
两次BFS
边权均非负的情况才可以用,用于记录整条直径。
1 | // 找到以bg为起点的直径 |
树形DP
没有边权的正负限制,但只能保存直径的长度。
1 | void dp(int x) { |
练习
- acwing-350 模板题,记录直径并修改
- acwing-351 直径的性质
- acwing-389 直径的必须边
- acwing-390
多条直径必相交于一点或一条公共路径。
任意两个同一侧的直径端点到相同直径分叉点的距离均相等。
直径一定是最长边。
边权均非负的情况才可以用,用于记录整条直径。
1 | // 找到以bg为起点的直径 |
没有边权的正负限制,但只能保存直径的长度。
1 | void dp(int x) { |
1 | #include <bits/stdc++.h> |
1 | #include <bits/stdc++.h> |
以最小的代价,让集合内部连通
Kruskal更倾向以集合的方式建模,Prim则更方便地记录最小生成树