直径直径(Diameter)是指树上最长简单路。直径求法:两遍搜索 (BFS or DFS)任选一点w为起点,对进行搜索,找出离w最远点u。以u为起点,再进行搜索,找出离u最远点v。则u到v路径长度即为直径。简单证明:如果w在直径上,那么u一定是直径一个端点。反证:若u不是端点,则从直径另一端点到w再到u距离比直径更长,与假设矛盾。如果w不在直径上,且w到其距最远点u
转载 2024-04-12 22:44:36
52阅读
直径:给定一颗每条边都有一个权值, 中任意两点都有一条唯一简单路径,路径长度为连接两点路径上边权之和,路径长度最长一条为直径,往往说直径既可以指路径长度,也可以指具体路径(即经过哪些点)。直径不唯一。 求直径一般有两种求法:两次dfs/bfs,树形dp,时间复杂度都为O(n)两次dfs/bfs: 好理解,具体路径记录方便,但处理不了负权边思路:由于树上任意两点都有唯一
转载 2024-01-04 18:30:24
70阅读
前置知识: 直径指树上最远两点间距离 树上任意选一点BFS,找到最远一点一定是直径一个端点 所有直径一点相交于连续一段 直径可以用两种方法求:两遍BFS或者树形dp 传送门 ...
转载 2021-07-29 00:02:00
130阅读
2评论
【定义】 这棵中距离最远两个结点之间相隔距离。注意:是任意两个结点最远
原创 2023-02-08 09:08:46
104阅读
noip 2018 day1 t3听学长说是二分+树形dp+二分。但是暴力分给还是挺足55分。 20分是直径,无奈不会求,n^n暴力dfs只拿了10分,血亏一波。 1.树形dp求直径 设当前节点为x,d[x]表示以x为节点所能到达最长链。显然对于穿过x直径=d[x]+d[tn]+
转载 2018-12-17 13:48:00
79阅读
一个国家由n 个城市组成,这 n 个城市由 n−1 条双向道路连接,呈一个树形结构。 每个城市都设有加油站,在第 i 个城市可以购买 wi升汽油。 汽车在道路上行驶,毫无疑问也会消耗汽油,每条道路具体耗油量也会给出。 现在,需要制定一条汽车行进路线,从任意城市 s出发,经过一条简单路径,到达任意 ...
转载 2021-10-17 20:12:00
205阅读
2评论
直径,即这棵中距离最远两个结点距离。每两个相邻结点距离为1,即父亲结点与儿子结点或儿子结点与父子结点之间距离为1.有趣是,从 任意一个结点a出发,走到距离最远结点b,再从结点b出发,能够走最远距离,就是直径中相邻两个结点距离为1。你任务是:给定一棵, 求这棵中距离最远两个结点距离。
原创 2021-07-16 14:58:24
143阅读
直径又称树上最长路,结论为从某一点搜出最长路径一定是s或t点,再用一次搜索就会找出树直径 只要运用就是反证法。 现在假设s到t是直径。 取某一点u,搜到最远点为x; 1. u在s-t路径上: 如果u在直径上,那么下一步肯定会搜到直径某点,(如果,不是直径某点的话,那么,dis(
转载 2016-10-10 10:33:00
322阅读
2评论
两遍bfs即可 分析:一开始任取一个点u进行搜索查找出距离点u最远距离点v和长度 第二次dfs则从第一次中v找出距离点v最远距离路径长度
转载 2018-07-13 21:39:00
148阅读
2评论
问题1:求一个点到树上另一个点距离最大值,另一个点是直径端点证明
j
原创 2022-07-05 10:28:00
82阅读
1.直径求法不是很难,两遍DFS,直径又称为最长路,没看到直径裸题,除了饭店那个题,讲的是有一家饭店在一个图中,饭店送餐时间与最远送餐距离成正比,求饭店修建位置使得饭店送餐时间最短,那么...
转载 2019-09-06 21:52:00
116阅读
2评论
直径重心堪称是树上最美妙两个性质,以后再添重心性质 直径求法:dp或者两遍搜索 直径应用:核:这个偏心距可以证明肯定离直径时最优,考虑多次dfs把链拉出来,在上面双指针找最远点 双倍经验:消防局设立 agc005c: 首先最大两个数一定是直径端点,最小那个一 ...
转载 2021-09-29 15:35:00
196阅读
2评论
科学家在观测一棵大树,这棵在不断地生长,科学家给这棵每个节点编了号。开始时候,这棵很小只有4个节点,一号点为根,其他三个节点挂在上面。在接下来M次观察中,科学家每次都能看见这棵从叶子处长出新两个节点来。如果当前这棵有N个节点,那么这棵两个节点编号分别为N+1,N+2。科学
转载 2019-11-10 17:25:00
282阅读
2评论
重心重心定义找到这样一个节点,使以其作为根节点时,最大子树所含节点数最少解决方法很简单,随便扯一个节点作为根节点,然后算一个点时考虑完所有儿子后再考虑一下父亲作为子树答案即可两种打法int dfs (int x,int fa,int m){ son[x]=1,ms[x]=0;//ms max_num_of_son int tans=2000; for (int e=...
原创 2021-12-27 15:37:03
253阅读
传送门 Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5362 Accepted: 2634 Case Time Limit: 1000MS Description After hearing abou
转载 2017-07-17 20:06:00
70阅读
2评论
直径和LCA图中所有最短路径最大值即为「直径」,可以用两次 DFS 或者树形 DP 方法在 O(n) 时间求出树直径。 方法1 首先对任意一个结点做 DFS 求出最远结点,然后以这个结点为根结点再做 DFS 到达另一个最远结点。第一次 DFS 到达结点可以证明一定是这个图直径一端,第二次 DFS 就会达到另一端。下面来证明这个定理。两次DFS方法不适用于有负权边。cons
原创 2022-01-20 11:56:22
184阅读
直径及其性质 参考: "直径及其性质与证明" ①直径两端点一定是两个叶子节点
原创 2022-11-03 15:22:14
155阅读
# 计算直径算法 在图论中,直径是指中任意两点之间最长简单路径长度。计算直径是一个常见问题,可以帮助我们更好地理解结构和性质。下面我们将介绍一种基于DFS(深度优先搜索)算法方法来计算直径。 ## 算法原理 我们可以通过DFS算法遍历每一个节点,计算每个节点到其他节点最长距离。最长距离两个节点之间路径就是直径。 具体算法步骤如下: 1. 从任意
原创 2024-06-19 07:08:40
89阅读
直径:一棵中从一个节点到另一个节点一条最长路径,这条路径可以只是这个树上部分节点,也可以是所有节点(主要看这棵连接方式)在这个路径上任意节点分岔不予考虑 求法:先任意选择一个节点a当做起点来找到距离这个点最远端点b(这两点之间路径上所有边权值和最大),然后再以b节点为...
转载 2015-08-18 19:49:00
62阅读
2评论
直径:从随意一点出发,BFS找到最远距离,然后在从该点出发BFS找到最远距离 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <queue> #include <cm
转载 2016-03-02 09:45:00
83阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5