試題 演算法提高 樹的直徑

2021-10-07 16:34:22 字數 1085 閱讀 6630

資源限制

時間限制: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...