CCF 網路延時 樹的直徑

2021-07-22 12:52:04 字數 2454 閱讀 3328

題目:

問題描述

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

當資訊在電腦、交換機之間傳遞時,每一步只能通過自己傳遞到自己所連線的另一台電腦或交換機。請問,電腦與電腦之間傳遞訊息、或者電腦與交換機之間傳遞訊息、或者交換機與交換機之間傳遞訊息最多需要多少步。

輸入格式

輸入的第一行包含兩個整數n, m,分別表示交換機的台數和終端電腦的台數。

第二行包含n - 1個整數,分別表示第2、3、……、n臺交換機所連線的比自己上一層的交換機的編號。第i臺交換機所連線的上一層的交換機編號一定比自己的編號小。

第三行包含m個整數,分別表示第1、2、……、m臺終端電腦所連線的交換機的編號。

輸出格式

輸出乙個整數,表示訊息傳遞最多需要的步數。

樣例輸入

4 2

1 1 3

2 1樣例輸出

4樣例說明

樣例的網路連線模式如下,其中圓圈表示交換機,方框表示電腦:

其中電腦1與交換機4之間的訊息傳遞花費的時間最長,為4個單位時間。

樣例輸入

4 4

1 2 2

3 4 4 4

樣例輸出

4樣例說明

樣例的網路連線模式如下:

其中電腦1與電腦4之間的訊息傳遞花費的時間最長,為4個單位時間。

評測用例規模與約定

前30%的評測用例滿足:n ≤ 5, m ≤ 5。

前50%的評測用例滿足:n ≤ 20, m ≤ 20。

前70%的評測用例滿足:n ≤ 100, m ≤ 100。

所有評測用例都滿足:1 ≤ n ≤ 10000,1 ≤ m ≤ 10000。

思路: 

計算樹的直徑問題,兩邊搜尋

第一遍找直徑的乙個端點,第二遍通過這個端點搜尋出直徑及另乙個端點;

簡單證明(也可以看看這個證明樹的直徑(最長路)的詳細證明)

首先先說明,在樹中任意兩點之間的路徑有且只有一條 ,  dis(x,y)表示 x 到 y 的距離;

設想 x 和 y 分別為直徑的兩個端點,a 為樹上任意一點;

假設從 a 搜尋找到的最遠的點為 b(b是除 x,y,a 後任意一點),

1.若從 a 到 b 的路徑上與直徑有交點 c,如下圖;

由於 a 到 y 只有 1 條路徑為 a->c->y, 故  dis(a,b) =  dis(a,c)+dis(c,b) > dis(a,c) + dis(c,y) = dis(a,y)

繼而有  dis(c,b) > dis(c,y)   ==> dis(x,c)+dis(c,b) > dis(x,c) + dis(c,y) 

即 dis(x,b) > dis(x,y) , x->y 不是最長的,矛盾,故假設不成立;

2.若從 a 到 b 的路徑上與直徑無交點,c 為直徑上一點,如下圖;

易有       dis(a,b)  > dis(a,c)+dis(c,y) (距離a的最遠點為b)

顯然有   dis(a,b)+dis(a,c) > dis(c,y)  即 dis(c,b) > dis(c,y)

所以       dis(x,c)+dis(c,b) > dis(x,c) + dis(c,y)

故 x->y 不是最長路徑,矛盾,假設不成立;

綜上 b 一定是 x,y 中的一點

**

#include#include#includeusing namespace std;

#define max 21007

vectora[max]; //鄰接表

int pos,mc; // 遠的點和最遠距離

bool b[max]; //標記是否遍歷過

//深度優先搜尋整張圖,記錄下距離begin最遠的點和其距離

void dfs(int begin,int c)

//繼續往下搜尋

for(int i=0;i>n>>m;

for(int i=2,j;i<=n+m;++i)

//第一遍dfs,找圖的直徑的一端

mc=0,pos=0;

memset(b,0,sizeof(b));

dfs(n+m,0);

//第二遍bfs,直到直徑的一段後,搜尋另一端,並記錄直徑的長度

mc=0;

memset(b,0,sizeof(b));

dfs(pos,0);

cout<

CCF 網路延時

試題編號 201503 4 試題名稱 網路延時 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定乙個公司的網路,由n臺交換機和m臺終端電腦組成,交換機與交換機 交換機與電腦之間使用網路連線。交換機按層級設定,編號為1的交換機為根交換機,層級為1。其他的交換機都連線到一台比自己...

CCF 網路延時

201503 4 試題名稱 網路延時 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定乙個公司的網路,由n臺交換機和m臺終端電腦組成,交換機與交換機 交換機與電腦之間使用網路連線。交換機按層級設定,編號為1的交換機為根交換機,層級為1。其他的交換機都連線到一台比自己上一層的交...

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

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