時間限制: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思路:隨便選一點,找到最遠的那個點,然後從最遠的再找一遍;
#includeusingnamespace
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...