lightoj 1094 樹的直徑 DFS

2022-03-17 02:44:37 字數 801 閱讀 5797

題意:一共n各節點編號0-n-1, 輸入n-1條無向邊代表u-v距離為w,求最遠的兩個點的距離(即樹的直徑)。

思路:如果用最短路徑來求,n<=30000是會超時的,正確做法是先隨便從乙個點開始深搜,搜到最遠的節點一定是直徑其中乙個節點,然後從這個點再來次深搜。

1 #include 2

using

namespace

std;

3const

int n = 30004

;4 vectorint, int> >v[n];

5bool

vis[n];

6int

index, ans;

7void dfs(int s, int

sum)815

for(unsigned int i = 0; i < v[s].size(); i++)

1621}22

intmain()

2337 ans = 0

;38 memset(vis, 0, sizeof

vis);

39 dfs(0, 0

);40 ans = 0

;41 memset(vis, 0, sizeof

vis);

42 dfs(index, 0

);43 printf("

case %d: %d\n

", ++cas, ans);44}

45return0;

46 }

SDOI2013 直徑(樹的直徑)

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

樹的直徑 板子

不帶解釋版模板o n 常數較大,但是可以知道樹上每一點到直徑端點的距離,這個大多時候都很有用 struct node e maxn 2 ll dis1 maxn dis2 maxn int st,ed,max len void dd int u,int fa,int len,int flag fil...

樹的直徑相關

一.樹直徑的定義.顯然一棵樹可以有不止一條直徑.二.樹直徑的求解.一般來說樹的直徑可以用樹形dp來求.設f i 0 1 f i 0 1 f i 0 1 表示在i ii的子樹中以i ii為一端的最長 次長鏈長度,我們可以很容易dp出來這個值,樹的直徑就是f i 0 f i 1 f i 0 f i 1 ...