hiho 1050 樹中的最長路 樹的直徑

2022-02-19 12:42:44 字數 1853 閱讀 5899

時間限制:10000ms

單點時限:1000ms

記憶體限制:256mb

描述上回說到,小ho得到了一棵二叉樹玩具,這個玩具是由小球和木棍連線起來的,而在拆拼它的過程中,小ho發現他不僅僅可以拼湊成一棵二叉樹!還可以拼湊成一棵多叉樹——好吧,其實就是更為平常的樹而已。

但是不管怎麼說,小ho喜愛的玩具又公升級換代了,於是他更加愛不釋手(其實說起來小球和木棍有什麼好玩的是吧= =)。小ho手中的這棵玩具樹現在由n個小球和n-1根木棍拼湊而成,這n個小球都被小ho標上了不同的數字,並且這些數字都是出於1..n的範圍之內, 每根木棍都連線著兩個不同的小球,並且保證任意兩個小球間都不存在兩條不同的路徑可以互相到達。總而言之,是乙個相當好玩的玩具啦!

但是小hi瞧見小ho這個樣子,覺得他這樣沉迷其中並不是一件好事,於是尋思著再找點問題讓他來思考思考——不過以小hi的水準,自然是手到擒來啦!

於是這天食過早飯後,小hi便對著又拿著樹玩具玩的不亦樂乎的小ho道:「你說你天天玩這個東西,我就問你乙個問題,看看你可否知道?」

「不好!」小ho想都不想的拒絕了。

「那你就繼續玩吧,一會回國的時候我不叫上你了~」小hi嚴肅道。

「誒!別別別,你說你說,我聽著呢。」一向習慣於開啟跟隨模式的小ho忍不住了,馬上喊道。

小hi滿意的點了點頭,隨即說道:「這才對嘛,我的問題很簡單,就是——你這棵樹中哪兩個結點之間的距離最長?當然,這裡的距離是指從乙個結點走到另乙個結點經過的木棍數。」。

「啊?」小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

思路:隨便選一點,找到最遠的那個點,然後從最遠的再找一遍;

#includeusing

namespace

std;

#define ll long long

#define pi (4*atan(1.0))

#define eps 1e-14

const

int n=1e6+10,m=1e6+10,inf=1e9+10

;const ll inf=1e18+10,mod=2147493647

;struct

isedge[n];

inthead[n],edg;

intnode1,ans;

void

init()

void add(int u,int

v)void dfs(int u,int fa,int

deep)

for(int i=head[u];i!=-1;i=edge[i].next)

}int

main()

dfs(

1,-1,0

); dfs(node1,-1,0

); cout

return0;

}

hiho 1050 樹中的最長路

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述上回說到,小ho得到了一棵二叉樹玩具,這個玩具是由小球和木棍連線起來的,而在拆拼它的過程中,小ho發現他不僅僅可以拼湊成一棵二叉樹!還可以拼湊成一棵多叉樹 好吧,其實就是更為平常的樹而已。但是不管怎麼說,小ho喜愛的玩具又...

hiho 1050 樹中的最長路

題目大意 給出一棵樹,其中每兩個節點都可以形成乙個路徑 要求路徑中的邊只能走一次 求出所有路徑中的長度最大值。分析 由於樹的任何乙個節點均可以作為根節點,因此dfs時候,選擇1即可。實現 pragma once pragma execution character set utf 8 本檔案為utf...

hiho 1050 樹中的最長路 樹的直徑

最近在複習比較簡單的知識,順便當整理 吧。樹的直徑是乙個經典問題,即求樹上最遠兩點的距離。思路一 任取乙個點,求這個點的最遠點的最遠點,兩遍bfs即可。1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 in...