hdu4607Park Visit(樹的直徑)

2022-05-14 01:43:23 字數 758 閱讀 7133

先求出樹的直徑:

從任意一點(一般取第一點)進行bfs,記錄下邊界a;

再從a進行bfs,直到邊界,記錄下長度,即直徑。

然後,如果輸入不大於直徑,直接輸出即可,

若大於直徑,則除了直徑上的點,其他要走的都要走乙個來回,需要乘2

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7const

int maxn=1e5+10

;8 vectornode[maxn];

9int

n , m;

10int

start,mm;

11void dfs(int per,int fro,int

len)

1218

for(int i=0;i)

19if(node[per][i]!=fro) dfs(node[per][i],per,len+1

);20}21

intmain()

2237 start=mm=0

;38 dfs(1,0,0

);39 mm=0

;40 dfs(start,0,0

);41

42int

p;43

for(int i=0;i)

4449

}50 }

HDU4607 樹的直徑

樹的直徑的求法,任取一點u為起點,bfs出一條最長路徑,假設此時終點為v,則再次以v為起點,再bfs出一條最長路徑v w。可以得出樹的直徑即為所求。證明略。可以直接bfs或者dfs都行,來發水題 author crazy 石頭 data structure 樹的直徑 created time 201...

樹的直徑 hdu 4607

樹的直徑定義 樹中所有最短路徑的最大值。定義distance a,b 為頂點a與b之間的最短距離。用數學語言表示就是 對於一棵樹 t v,e 彐vx,vy v,v1,v2 v,都有distance v1,v2 distance vx,vy 則把vx到vy的最短路徑稱為樹t的直徑。現在我們來用演算法求...

hdu 4607 求樹的直徑

分析後就是求樹的直徑兩次bfs即可 證明 樹的直徑是指樹的最長簡單路。求法 兩遍bfs 先任選乙個起點bfs找到最長路的終點,再從終點進行bfs,則第二次bfs找到的最長路即為樹的直徑 原理 設起點為u,第一次bfs找到的終點v一定是樹的直徑的乙個端點 證明 1 如果u 是直徑上的點,則v顯然是直徑...