Week6 作業 A 氪金帶東

2021-10-04 13:11:09 字數 1696 閱讀 8955

一、題目描述

input

輸入檔案包含多組測試資料。對於每組測試資料,第一行乙個整數n (n<=10000),接下來有n-1行,每一行兩個數,對於第i行的兩個數,它們表示與i號電腦連線的電腦編號以及它們之間網線的長度。網線的總長度不會超過10^9,每個數之間用乙個空格隔開。

output

對於每組測試資料輸出n行,第i行表示i號電腦的答案 (1<=i<=n).

sample input

51 1

2 13 1

1 1

sample output32

344

二、思路概述

1.首先找出圖的直徑v1和v2兩個點:

從任意一點找它能到達的最遠的點v1,然後從v1找v1能到達最遠的點v2.

2.然後從v1開始遍歷,計算v1到達每一點的最短距離;

然後從v2開始遍歷,計算v2到達每一點的最短距離;

看每個點是到v1更遠還是到v2更遠。

3.圖的結構使用vector陣列來儲存,使用bfs遍歷。

三、細節

1.我是使用vector陣列才儲存圖的資訊的 ,但是在儲存資訊時出錯,導致一直無法匯出正確答案。

正確:

void

addedge

(int u,

int v,

int w)

錯誤:

void

addedge

(int u,

int v,

int w)

四、完整**

#include

#include

#include

#include

#include

#include

using

namespace std;

struct edge};

const

int maxn=

1e4+4;

vector g[maxn]

;//用vector陣列來儲存每個點旁邊的邊

int dis[maxn]

;//dis陣列用來儲存每次點到此點的距離

void

addedge

(int u,

int v,

int w)

intbfs

(int u)

//尋找離u距離最遠的點

xp.push

(v);}}

}return maxv;

}int

main()

int*distance=

newint

[n+1];

//用來記錄答案

int v1=

bfs(3)

;int v2=

bfs(v1)

;//v1和v2是直徑

//cout(int i=

1;i<=n;i++

)int m=

bfs(v2)

;for

(int i=

1;i<=n;i++)}

return0;

}

Week6作業A 氪金帶東

輸入檔案包含多組測試資料。對於每組測試資料,第一行乙個整數n n 10000 接下來有n 1行,每一行兩個數,對於第i行的兩個數,它們表示與i號電腦連線的電腦編號以及它們之間網線的長度。網線的總長度不會超過10 9,每個數之間用乙個空格隔開。對於每組測試資料輸出n行,第i行表示i號電腦的答案 1 i...

week6 作業 A 氪金帶東

輸入檔案包含多組測試資料。對於每組測試資料,第一行乙個整數n n 10000 接下來有n 1行,每一行兩個數,對於第i行的兩個數,它們表示與i號電腦連線的電腦編號以及它們之間網線的長度。網線的總長度不會超過10 9,每個數之間用乙個空格隔開。output 對於每組測試資料輸出n行,第i行表示i號電腦...

A 氪金帶東

實驗室裡原先有一台電腦 編號為 1 最近氪金帶師咕咕東又為實驗室購置了 n 1 臺電腦,編號為 2 到 n 每台電腦都用網線連線到一台先前安裝的電腦上。但是咕咕東擔心網速太慢,他希望知道第i臺電腦到其他電腦的最大網線長度,但是可憐的咕咕東在不久前剛剛遭受了宇宙射線的降智打擊,請你幫幫他。輸入要求 輸...