hdu4607Park Visit 樹的直徑

2021-07-03 22:36:28 字數 640 閱讀 9999

//給一棵雙向樹,數中邊的權值為1,問對於這顆樹中走k個節點的最短路徑

//如果k小於這顆數的直徑加1,那麼走k個節點就沒有重複的路,如果大於

//那麼大於的節點都需要走兩遍

#include

#include

#include

#include

using namespace std ;

const int maxn = 100010 ;

int head[maxn] ;

int vis[maxn] ;

struct edge

edge[maxn*2] ;

int nedge ;

void addedge(int u , int v)

queueque ;

int ma = 0 ;

int bfs(int st)

for(int i = head[u] ; i !=  -1 ;i = edge[i].next)

}return pos ;

}int main()

ma = 0 ;

int pos = bfs(1) ;

bfs(pos) ;

while(m--)

}return 0 ;

}

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顯然是直徑...