基本概念(樹的直徑):
樹是圖論中的連通無環圖,樹上的任意兩點間的路徑是唯一的。樹上的任意兩點的距離是兩點間路徑的邊權和。而樹的直徑(假設為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 用條邊將兩...