HDU4607 樹的直徑

2021-06-19 00:28:41 字數 1085 閱讀 7671

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

/******************************

* author :crazy_石頭

* data structure: 樹的直徑

* created time:2013/11/4 19:02

* pro:hdu 4607

* judge status:accepted

* memory:3128k

* time:453ms

*******************************/

#include

#include

#include

#include

#include

using

namespace std;

#define rep(i,h,n) for(int i=(h);i<=(n);i++)

#define inf

1<<29

const

int maxn=100000+5;

struct edge

edge[maxn<<2];

int head[maxn],dis[maxn],vis[maxn];

int cnt,tmp,n,m;

inline

void addedge(int u,int v)

inline

void makemap(int u,int v)

inline

int bfs(int s)}}

}return tmp;

}inline

void init()

int main()

tmp=bfs(1);

tmp=bfs(tmp);

while(m--)

}return0;}

* this source code was highlighted by ycdoit

. ( style: autumn )

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

hdu 4607 樹形dp 樹的直徑

題目大意 給你n個點,n 1條邊,將圖連成一棵生成樹,問你從任意點為起點,走k k n 個點,至少需要走多少距離 每條邊的距離是1 思路 樹形dp求樹的直徑r a 若k r 1 ans k 1 b 若k r 1,ans r k r 1 2 include include includeusing n...