計算機網路(樹形DP)

2021-09-02 11:37:48 字數 1786 閱讀 7609

description

樹的中心的定義:樹的中心點是離它最遠的結點的距離最近。具體地說,若某結點i是樹的中心,那麼i到樹的最遠的點的距離是最短的。比如說下面這棵邊權為1的樹中:

1----2----5----6

|  |

3  4

◆距離結點 1 最遠的點是 6,距離為 3;

◆距離結點 2 最遠的點是 6 或 3,距離為 2;

◆距離結點 3最遠的點是6,距離為 4;

◆距離結點 4 最遠的點是3或6,距離為 3;

◆距離結點 5 最遠的點是3,距離為 3;

◆距離結點 6 最遠的點是3,距離為 4;

由上面可以看出,每個結點都有乙個距離最遠的點的距離,其中距離2是最短的距離是2,所以點 2 就是樹的中心。

用數學語言描述樹的中心如下:

●設d(a,b)=樹中兩點之間的距離;

●設maxd(i)=max

●那麼樹的中心結點為:min

一棵樹有乙個中心或兩個,若有兩個中心,則他們必定是相鄰的。比如下面這棵樹,其中心有1和2兩個。

1-----2----5

|  |

3  4

現在你的任務是,給出一棵樹,請找該樹的中心,若有兩個,請由小到大輸出。

input

第一行乙個整數n,表示樹的結點個數。

第二行有n-1個數字,第i個數字與編號為i+1的結點有邊相連。

output

輸出僅一行按公升序輸出中心計算機的編號

這題是很顯然的樹形dp……

首先定義兩個陣列d1,d2(也可用乙個陣列d[2]代替)

d1[x]表示到x的最大路徑,d2[x]表示到x的次長路徑。

然後兩次dfs就可以做出來了。主要是懶得再寫了題解了

下面上醜**

#include.h>

using namespace std;

int h[

100005

],k[

100005

],y;

int d1[

100005

],d2[

100005];

int n,x,i,j,cnt,rd[

100005];

struct node e[

200005];

void

add(int x,int y)

int dfs

(int x,int p)

else

if(d2[x]

<=d1[y]+1

)}}void

dfs(int x,int p)

else

if(d2[x]+1

>=d2[y])}

else

else

if(d1[x]+1

>=d2[y])}

dfs(y,x);}

}int main()

dfs(1,

0);dfs(1

,0);

int k1,k2=-1

,minn=

0x7fffffff

;for

(i=1

; i<=n; i++

)else

if(minn==d1[i]

)k2=i;}if

(k2//if(k1return0;

}

計算機網路9 計算機網路效能

1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位時間 ...

計算機網路 計算機網路的效能

目錄 1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位...

計算機網路學習 計算機網路效能

出自 1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位...