树的直径与树的重心

树的直径

树的直径是指树上的最长简单路。

直径的求法:两遍搜索

任选一点w为起点,对树进行搜索,找出离w最远的点u。

以u为起点,再进行搜索,找出离u最远的点v。

则u到v的路径长度即为树的直径。

----------------------------------------------------------------

树的重心
树的重心:

找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心。

删去重心后,生成的多棵树尽可能平衡。

树的重心可以通过简单的两次搜索求出,第一遍搜索求出每个结点的子结点数量son[u],第二遍搜索找出使max{son[u],n-son[u]-1}最小的结点。

实际上这两步操作可以在一次遍历中解决。

对结点u的每一个儿子v,递归的处理v,求出son[v],然后判断是否是结点数最多的子树,

处理完所有子结点后,判断u是否为重心。

原文地址:https://www.cnblogs.com/adelalove/p/8848871.html

时间: 2024-08-30 03:29:47

树的直径与树的重心的相关文章

树的直径、树的重心与树的点分治

树的直径 树的直径(Diameter)是指树上的最长简单路. 直径的求法:两遍搜索 (BFS or DFS) 任选一点w为起点,对树进行搜索,找出离w最远的点u. 以u为起点,再进行搜索,找出离u最远的点v.则u到v的路径长度即为树的直径. 简单证明: 如果w在直径上,那么u一定是直径的一个端点.反证:若u不是端点,则从直径另一端点到w再到u的距离比直径更长,与假设矛盾. 如果w不在直径上,且w到其距最远点u的路径与直径一定有一交点c,那么由上一个证明可知,u是直径的一个端点. 如果w到最远点u

tyvj:1520 树的直径 spfa/树的直径

tyvj:1520 树的直径 Time Limit: 1 Sec  Memory Limit: 131072KiBSubmit: 9619  Solved: 3287 题目连接 http://www.tyvj.cn/p/1520 Description 树的直径,即这棵树中距离最远的两个结点的距离.每两个相邻的结点的距离为1,即父亲结点与儿子结点或儿子结点与父子结点之间的距离为1.有趣的是,从树 的任意一个结点a出发,走到距离最远的结点b,再从结点b出发,能够走的最远距离,就是树的直径.树中相邻

大臣的旅费(树的直径)

问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达.同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的. J是T国重要大臣,他巡查于各大城市之间,体察民情.所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情.他有一个钱袋,用于存放往来城市间的路费. 聪明的J发现,如果不在某个城市停下来修整,在连续

ural 1145 Rope in the Labyrinth 图中 bfs求树的直径

1145. Rope in the Labyrinth Time limit: 0.5 second Memory limit: 64 MB A labyrinth with rectangular form and size m × n is divided into square cells with sides' length 1 by lines that are parallel with the labyrinth's sides. Each cell of the grid is

HDU 4123(树的直径+单调队列)

Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2833    Accepted Submission(s): 917 Problem Description Bob wants to hold a race to encourage people to do sports. He has got trouble i

[树的直径] SDOI2013 直径

SDOI2013 直径 题目描述 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节点,可以证明其有且仅有N-1 条边. 路径:一棵树上,任意两个节点之间最多有一条简单路径.我们用 dis(a,b)表示点a和点b的路径上各边长度之和.称dis(a,b)为a.b两个节点间的距离. 直径:一棵树上,最长的路径为树的直径.树的直径可能不是唯一的. 现在小Q想知道,对于给定的一棵树,其直径的长度是多少,以及有多少条边满足所有

[树的直径]F. Three Paths on a Tree

F. Three Paths on a Tree Description You are given an unweighted tree with nn vertices. Recall that a tree is a connected undirected graph without cycles. Your task is to choose three distinct vertices a,b,ca,b,c on this tree such that the number of

zoj3820 Building Fire Stations 树的直径+二分

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3820 Building Fire Stations Time Limit: 5 Seconds      Memory Limit: 131072 KB      Special Judge Marjar University is a beautiful and peaceful place. There are N buildings and N - 1 bidire

UVA 11695 Flight Planning 修改一条边使得树的直径最短

题目链接:点击打开链接 题意: 给定n(n<=2500) 节点的一棵树 删除一条边再加入一条边使得树的直径最短. 思路:首先枚举删除的那条边, 然后计算出删除后的2棵子树各自的重心 则新建的边一定是重心的连线. 而新的直径要么是在某个子树中,要么是两个子树间. #include <cstdio> #include <algorithm> #include <string.h> #include <queue> #include <cstring&