,或者通過其他網路間接連通。 為了測試組建的網路的效能,假設相鄰的路由之間的資料傳輸需要一單位時間,現在需要知道任意兩個路由之間傳輸資料最多需要多長時間。
輸入格式
第一行乙個整數 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。所有的終端電腦都直接連線到交換機上。當資訊在電腦 交換機之...