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