hihocoder 1050之樹中最長路

2021-07-30 19:49:18 字數 1928 閱讀 7711

原文:

這道題實際上就是資料結構中求樹的直徑問題,這裡的解法就是先從任意乙個點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
123

4567

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 結尾的單詞...