一開始就是覺得用dfs想不通為什麼網上是說兩遍dfs/bfs找出當前最大邊(樹的最大直徑)
後來發現純dfs時間代價太大了o(n²)
附上純dfs**
#include
#include
int n,visited[
1000
],point[
1000]=
;int dist[
1000][
1000]=
;void
end()if
(sum==1)
//只有一條邊的是葉子
point[i]=1
;}}int l=
0,ans=0;
void
dfs(
int i,
int step)
for(
int j=
0;j}int
main()
end();
//找葉子節點
for(
int i=
0;i)printf
("%d\n"
,ans)
;return0;
}
看了網上的**後的修改
後續附上
大臣的旅費 藍橋杯
給你一顆樹,讓你求出樹上最遠的倆個點的距離 先以第乙個頂點為根,進行一次dfs,找出從第乙個點出發的最長的乙個直徑,然後再以直徑的另外乙個端點a,為根進行一次dfs,又可以找出另外乙個端點b,可以證明 a,b 即為樹的直徑 樹上任意倆點最遠的距離 下面是對這種證法的詳細證明 不是我證的。為了闡述清楚...
藍橋杯 大臣的旅費
問題描述 很久以前,t王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連線首都和王國內的各大城市。為節省經費,t國的大臣們經過思考,制定了一套優秀的修建方案,使得任何乙個大城市都能從首都直接或者通過其他大城市間接到達。同時,如果不重複經過大城市,從首都到達每個大城市的方案都是唯一的。j...
藍橋杯 大臣的旅費
問題描述 很久以前,t王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連線首都和王國內的各大城市。為節省經費,t國的大臣們經過思考,制定了一套優秀的修建方案,使得任何乙個大城市都能從首都直接或者通過其他大城市間接到達。同時,如果不重複經過大城市,從首都到達每個大城市的方案都是唯一的。j...