計蒜客習題 網路延時 (樹的直徑)

2021-09-13 09:51:49 字數 1427 閱讀 4080

,或者通過其他網路間接連通。 為了測試組建的網路的效能,假設相鄰的路由之間的資料傳輸需要一單位時間,現在需要知道任意兩個路由之間傳輸資料最多需要多長時間。

輸入格式

第一行乙個整數 n(2≤n≤50000) 表示網路中路由個數。接下來 n - 1 行,每行輸入 u,v(1≤u,v≤n) ,表示路由 u, v 相連。

輸出格式

輸出一行表示答案。

樣例輸入

86 3

3 73 4

7 55 1

6 85 2

樣例輸出

5開始沒看懂,後來看了下網上大佬的解釋,就明白怎麼求樹的直徑(兩次bfs)

下面簡要描述下過程

1.第一次bfs任意以乙個點為起始點,求出最遠距離的頂點,這個頂點一定是樹的直徑的乙個端點,也就是構成樹的最遠距離的兩個點中的其中乙個點。具體論證過程傳送門

2.第二次bfs就用第一次求得的端點為起點,直接bfs求最遠距離就可以啦。

#include

#include

#include

#include

using namespace std;

const

int maxn=

50001

;struct nodepoint[maxn]

;struct edge

edge

(int _v,

int _next):v

(_v)

,next

(_next)

//建構函式

}e[maxn*2]

;int p[maxn]

,maxp,maxs=0;

;//儲存最大距離的點數和步數

bool vst[maxn]

;//判斷是否拜訪

void

bfs(node a)

q.push

(point[e[i]

.v]);}

}}}int

main()

memset

(point,0,

sizeof

(point));

memset

(vst,false,

sizeof

(vst));

point[1]

.num=1;

bfs(point[1]

);//printf("%d %d\n",maxp,maxs);

memset

(point,0,

sizeof

(point));

memset

(vst,false,

sizeof

(vst));

bfs(point[maxp]);

printf

("%d\n"

,maxs)

;}

CCF 網路延時 樹的直徑

題目 問題描述 給定乙個公司的網路,由n臺交換機和m臺終端電腦組成,交換機與交換機 交換機與電腦之間使用網路連線。交換機按層級設定,編號為1的交換機為根交換機,層級為1。其他的交換機都連線到一台比自己上一層的交換機上,其層級為對應交換機的層級加1。所有的終端電腦都直接連線到交換機上。當資訊在電腦 交...

計蒜客 習題 糟糕的bug(Trie樹)

蒜頭君作為蒜廠的工程師,在開發 時不小心寫出了乙個 bug 當使用者輸入密碼時,如果既和自己的密碼一致,也同時是另乙個使用者密碼的字首時,使用者會跳轉到 404 頁。然而蒜頭君堅稱 我們的使用者那麼少,怎麼可能觸發這個 bug 機智的你,能不能幫蒜頭君確認一下這個 bug 到底會不會觸發呢?第一行輸...

CCF 201503 4 網路延時(求樹的直徑)

問題描述 給定乙個公司的網路,由n臺交換機和m臺終端電腦組成,交換機與交換機 交換機與電腦之間使用網路連線。交換機按層級設定,編號為1的交換機為根交換機,層級為1。其他的交換機都連線到一台比自己上一層的交換機上,其層級為對應交換機的層級加1。所有的終端電腦都直接連線到交換機上。當資訊在電腦 交換機之...