原文:
這道題實際上就是資料結構中求樹的直徑問題,這裡的解法就是先從任意乙個點dfs到乙個端點,然後再從端點dfs求出最長的距離,即為直徑。
描述上回說到,小ho得到了一棵二叉樹玩具,這個玩具是由小球和木棍連線起來的,而在拆拼它的過程中,
小ho發現他不僅僅可以拼湊成一棵二叉樹!還可以拼湊成一棵多叉樹——好吧,其實就是更為平常的樹而已。
但是不管怎麼說,小ho喜愛的玩具又公升級換代了,於是他更加愛不釋手。小ho手中的這棵玩具樹現在由n個
小球和n-1根木棍拼湊而成,這n個小球都被小ho標上了不同的數字,並且這些數字都是出於1..n的範圍之內,
每根木棍都連線著兩個不同的小球,並且保證任意兩個小球間都不存在兩條不同的路徑可以互相到達。
但是小hi瞧見小ho這個樣子,覺得他這樣沉迷其中並不是一件好事,於是尋思著再找點問題讓他來思考思考。
「我的問題很簡單,就是——你這棵樹中哪兩個結點之間的距離最長?當然,這裡的距離是指從乙個結點走到
另乙個結點經過的木棍數。」。
「啊?」小ho低頭看了看手裡的玩具樹,困惑了。
提示一:路總有折點,路徑也不例外!輸入
每個測試點(輸入檔案)有且僅有一組測試資料。
每組測試資料的第一行為乙個整數n,意義如前文所述。
每組測試資料的第2~n行,每行分別描述一根木棍,其中第i+1行為兩個整數ai,bi,表示第i根木棍連線的兩個小球的編號。
對於20%的資料,滿足n<=10。
對於50%的資料,滿足n<=10^3。
對於100%的資料,滿足n<=10^5,1<=ai<=n, 1<=bi<=n
小hi的tip:那些用陣列儲存樹邊的記得要開兩倍大小哦!
輸出 對於每組測試資料,輸出乙個整數ans,表示給出的這棵樹中距離最遠的兩個結點之間相隔的距離。
樣例輸入
8樣例輸出1 21 3
1 44 5
3 66 7
7 8
6
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
#include#include
#include
std::
vector
<
int>a[
100001
]; bool
visit
[100001
]; int
max,
flag
;
void
find
(intu,
intnum
)
for(inti=
0;iu].
size
();i++)
}intmain
(void
)
find(1
,0); max=0
; memset
(visit,0
,sizeof
(visit
)); find
(flag,0
); std
::cout
<<
max<<
std::
endl
; }
來自code的**片
hihoCoder之KMP演算法
本分類記錄了本人在hihocode上面嘗試的結果,現在分享出來,大家一起學習。小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了乙隻河蟹,於是河蟹就向小hi和小ho提出了那個經典的問題 小hi和小ho,...
hihoCoder 1014 Trie樹(字典樹)
1014 trie樹 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一本詞典,於是小hi就向小ho提出了那個經典的問題...
字典樹模板(HihoCoder 1014)
include using namespace std struct nodetr 1000010 陣列大小開n 插入最多單詞個數 l 最長單詞長度 int num 0 void tr insert char s rt tr rt z id tr rt sum 標記前面字元相同,以s i 結尾的單詞...