題意:一共n各節點編號0-n-1, 輸入n-1條無向邊代表u-v距離為w,求最遠的兩個點的距離(即樹的直徑)。
思路:如果用最短路徑來求,n<=30000是會超時的,正確做法是先隨便從乙個點開始深搜,搜到最遠的節點一定是直徑其中乙個節點,然後從這個點再來次深搜。
1 #include 2using
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 ...