图论 —— 树的直径
图论 —— 树的直径
c4Lnn
这个作者很懒,什么都没留下…
展开
-
牛客小白月赛 22 B. 树上子链
链接https://ac.nowcoder.com/acm/contest/4462/H题意带负权的点权树,求直径思路树形 DP首先任选一点为根,记为 rootrootroot 并记 dp[x]dp[x]dp[x] 为以 xxx 为起点与其朝下所有节点的路径最大值,进行一次树形 DP:dp[i]=max(maxj∈son(i)(dp[i],w[i]+dp[j]),w[i])dp[i]=\max(\max \limits_{j \in son(i)}(dp[i],w[i]+dp[j]),w[原创 2020-07-29 23:02:20 · 113 阅读 · 0 评论 -
POJ 1985. Cow Marathon
链接http://poj.org/problem?id=1985题意求边权为正的树形图的直径(树上最长链)思路一两次 BFS随便选一个点 ppp,BFS 求出离点 ppp 最远的点 qqq再从点 qqq 出发,BFS 求出离点 qqq 最远的点 rrrqqq 到 rrr 的距离就是树的直径代码#include<iostream>#include<cstring>#include<queue>using namespace std;const i原创 2020-07-29 21:51:33 · 119 阅读 · 0 评论 -
黑暗爆炸 1912. 巡逻
链接https://www.luogu.com.cn/problem/P3629题意树形图,从根出发遍历完所有节点后回到根,建立 k(k≤2)k(k \le 2)k(k≤2) 条路后,求完成遍历的最小距离思路找出树的直径,在两个端点间建条路,形成一个环,这样可以减小 L−1L-1L−1 的距离若 k=2k=2k=2,再找一次直径,但要将第一次找出的直径的所有边权都变为 −1-1−1(两个环可能有重边)代码#include<bits/stdc++.h>using namespac原创 2020-07-29 14:13:13 · 187 阅读 · 0 评论