一、題目描述
input輸入檔案包含多組測試資料。對於每組測試資料,第一行乙個整數n (n<=10000),接下來有n-1行,每一行兩個數,對於第i行的兩個數,它們表示與i號電腦連線的電腦編號以及它們之間網線的長度。網線的總長度不會超過10^9,每個數之間用乙個空格隔開。
output對於每組測試資料輸出n行,第i行表示i號電腦的答案 (1<=i<=n).
sample input51 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臺電腦到其他電腦的最大網線長度,但是可憐的咕咕東在不久前剛剛遭受了宇宙射線的降智打擊,請你幫幫他。輸入要求 輸...