藍橋杯 試題 演算法提高 樹的直徑 (dfs)

2021-10-24 15:02:58 字數 1193 閱讀 9119

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

樹的直徑:找相距最遠兩點之間的距離,即為樹的直徑。

任一點出發,找到距離該點最遠的點 p1, p1 必定為直徑的乙個端點。(跑一遍dfs)

p1出發,找到距離p1最遠的點p2,p2必定為直徑的另乙個端點,所以p1,p2兩點連線是相距最遠的兩點,即為樹的直徑。 (再跑一遍dfs)

#include

#include

#include

using

namespace std;

const

int maxn=

1e5+10;

struct node};

int n,a,b,c,p1,maxlen=0;

vector g[maxn]

;//圖

bool vis[maxn]=;

//是否走過

void

dfs(

int u,

int dis)

for(

int i=

0;i.size()

;i++)}

}int

main()

vis[1]

=1;dfs(1

,0);

//從任一點出發,這裡從1出發

vis[1]

=0;

maxlen=0;

// 最遠距離

vis[p1]=1

;dfs

(p1,0)

;//從p1出發,能最遠距離就是樹的直徑

vis[p1]=0

; cout

}

試題 演算法提高 樹的直徑

資源限制 時間限制 100ms 記憶體限制 8.0mb 問題描述 樹的直徑 輸入格式 輸入的第一行包含乙個整數n,表示樹中的點數。接下來n 1行,每行3個正整數,表示連同的兩點及邊的權值。輸出格式 輸出1行,包含乙個整數,表示樹的直徑。樣例輸入 71 2 1 1 3 1 2 4 1 3 5 1 4 ...

藍橋杯 歷屆試題 大臣的旅費(樹的直徑)

歷屆試題 大臣的旅費 時間限制 1.0s 記憶體限制 256.0mb 問題描述 很久以前,t王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連線首都和王國內的各大城市。為節省經費,t國的大臣們經過思考,制定了一套優秀的修建方案,使得任何乙個大城市都能從首都直接或者通過其他大城市間接到達...

藍橋杯 試題 演算法提高 成績排序

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給出n個學生的成績,將這些學生按成績排序,排序規則,優先考慮數學成績,高的在前 數學相同,英語高的在前 數學英語都相同,語文高的在前 三門都相同,學號小的在前 輸入格式 第一行乙個正整數n,表示學生人數 接下來n行每行3個0 100...