資源限制
時間限制:100ms 記憶體限制:8.0mb
問題描述
樹的直徑
輸入格式
輸入的第一行包含乙個整數n,表示樹中的點數。接下來n-1行,每行3個正整數,表示連同的兩點及邊的權值。
輸出格式
輸出1行,包含乙個整數,表示樹的直徑。
樣例輸入
71 2 1
1 3 1
2 4 1
3 5 1
4 7 1
4 6 1
樣例輸出
5資料規模和約定
n<10^5
//樹的直徑,深搜找到最遠點,再用最遠點找到直徑,不是森林
#include
#include
#include
using
namespace std;
const
int maxn =
100005
;int n;
struct nodeedge[maxn]
;int cnt =0;
int head[maxn]
;//採用鏈式向前星
bool vis[maxn]
;void
add(
)int deepl =0;
int maxd;
void
dfs(
int u,
int step)
for(
int i = head[u]
;i!=-1
;i=edge[i]
.front)
}return;}
intmain()
maxd =1;
vis[1]
=true
;dfs(1
,0);
vis[1]
=false
; vis[maxd]
=true
;dfs
(maxd,0)
;printf
("%d"
,deepl)
;return0;
}
藍橋杯 試題 演算法提高 樹的直徑 (dfs)
時間限制 100ms 記憶體限制 8.0mb 樹的直徑 輸入的第一行包含乙個整數n,表示樹中的點數。接下來n 1行,每行3個正整數,表示連同的兩點及邊的權值。輸出1行,包含乙個整數,表示樹的直徑。71 2 1 1 3 1 2 4 1 3 5 1 4 7 1 4 6 1 n 10 5 樹的直徑 找相距...
求樹的直徑演算法
標籤 圖論 樹的直徑 閱讀體驗 樹的直徑是樹上的最長路 沒錯,真的這麼簡單.先隨便找個點i開始 dfs 然後找到一條最長路徑 假設終點是 u 然後從u開始再一次 dfs 再找到一條最長路徑 假設終點是 v u,v 就是樹的直徑了.ps 樹的直徑可以有多條 想想定義就知道 假設樹的直徑是 u,v 第一...
演算法導論 22 2 7 樹的直徑
22.2 7 很顯然數的直徑就是樹的最長簡單路。先進行一次bfs 然後再從 bfs的終點再進行一次 bfs得到的最長路徑就是直徑。進行了兩次 bfs,所以複雜度還 o e v 參考自 樹的直徑是指樹的最長簡單路。求法 兩遍bfs 先任選乙個起點bfs找到最長路的終點,再從終點進行bfs,則第二次bf...