樹的直徑的模板

2021-08-26 18:02:51 字數 676 閱讀 8666

今天寫了道樹的直徑的題,其實以前也看過,那時候並不專注,沒看懂,現在發現就只是兩遍bfs的事,但是原理並沒有這麼簡單

我來簡單說一下

我們隨便在樹中找乙個點u,然後開始bfs找到最遠的一點v,在之後就是關鍵部分,我們再從v開始bfs,找到的最遠距離就是直徑。

說到這裡,就有很多人看不懂了,因為並不能說明v就是直徑的乙個端點,這裡要通過反證法來證明

看不懂也不要緊,只要記住v就是直徑的乙個端點,然後再一遍bfs就可以得出答案

**如下:

#include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f

using namespace std;

typedef long long ll;

struct edge

;vectore[100000];

int vis[100000];

ll ans,dis[100000];

void add(int u,int v,int w)

int bfs(int x)

int len=e[u].size();

for(int i=0;i這裡的ans=-99999有點坑,第一遍寫的時候這裡卡了4%的資料,要注意

樹的重心 樹的直徑

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

樹的直徑 樹的重心

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

SDOI2013 直徑(樹的直徑)

小q最近學習了一些圖論知識。根據課本,有如下定義。樹 無迴路且連通的無向圖,每條邊都有正整數的權值來表示其長度。如果一棵樹有n個節點,可以證明其有且僅有n 1 條邊。路徑 一棵樹上,任意兩個節點之間最多有一條簡單路徑。我們用 dis a,b 表示點a和點b的路徑上各邊長度之和。稱dis a,b 為a...