樹的直徑,重心和基環樹(2019 2 3)

2021-09-10 19:56:08 字數 1307 閱讀 6238

基本概念(樹的直徑):

樹是圖論中的連通無環圖,樹上的任意兩點間的路徑是唯一的。樹上的任意兩點的距離是兩點間路徑的邊權和。而樹的直徑(假設為mp)是樹上的最長路徑,m,p兩點是樹上距離最遠的點。

演算法(樹的直徑):

兩次bfs或dfs:從樹上的的任意一點c出發找到離它最遠的乙個點a,再從點a開始尋找離它最遠的點b,ab的距離就是樹的直徑。

證明:只需要證明m點是樹的直徑的乙個端點,那麼mp就是樹的直徑了。通過反證法,假設m不是端點,ab才是樹的直徑。那麼

1.如果p是ab上的點,pm>pb,如圖

樹的直徑**實現:

1.老師的

2.我的:poj 1985 cow marathon(樹的直徑模板題)

#includeusing namespace std;

struct e

e[100000];

int d[50001],a[50001],b[50001],n,m;

int ans=0,num,t;

int x,y,z;

char c[2];

inline void work(int u,int v,int w)

inline void bfs(int s)

inline int dfs(int x)

dfs(1);

dfs(1,-1);

int ans=0x3f3f3f3f;

int a5010s=0;

for (int i=1;i<= n;i++)

{if (b[i]基環樹:基環樹是一種圖,它由乙個環組成,環上每個點都是一棵樹點樹 根,所以稱為基環樹。當然,一棵樹上連一條邊也會變成基環樹。基環樹分環和樹來處理,首先找環。

基環樹分為兩種:

基環內向樹:有向圖,在基環樹的基礎上每個節點的出度為1。

基環外向樹:有向圖,在基環樹的基礎上每個節點的入度為1。

Island 基環樹直徑

更新提示 第一次更新 正文 你準備瀏覽乙個公園,該公園由 n 個島嶼組成,當地管理部門從每個島嶼 i 出發向另外乙個島嶼建了一座長度為 l i 的橋,不過橋是可以雙向行走的。同時,每對島嶼之間都有一艘專用的往來兩島之間的渡船。相對於乘船而言,你更喜歡步行。你希望經過的橋的總長度盡可能長,但受到以下的...

樹的重心 樹的直徑

樹的重心 樹的重心定義為 找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹盡可能平衡.實際上樹的重心在樹的點分治中有重要的作用,可以避免n 2的極端複雜度 從退化鏈的一端出發 保證nlogn的複雜度,利用樹型dp可以很好地求樹的重心.求樹的重心 模...

樹的直徑 樹的重心

樹的直徑 定義 那麼樹上最遠的兩個點,他們之間的距離,就被稱之為樹的直徑。樹的直徑的性質 1.直徑兩端點一定是兩個葉子節點。2.距離任意點最遠的點一定是直徑的乙個端點,這個基於貪心求直徑方法的正確性 可以得出。3.對於兩棵樹,如果第一棵樹直徑兩端點為 u,v 第二棵樹直徑兩端點為 x,y 用條邊將兩...