麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

CCF201503-4 網絡延時(100分)

2019-11-14 09:08:10
字體:
來源:轉載
供稿:網友

問題鏈接:CCF201503試題。

問題描述

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

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

  輸入的第一行包含兩個整數n, m,分別表示交換機的臺數和終端電腦的臺數。  第二行包含n - 1個整數,分別表示第2、3、……、n臺交換機所連接的比自己上一層的交換機的編號。第i臺交換機所連接的上一層的交換機編號一定比自己的編號小。  第三行包含m個整數,分別表示第1、2、……、m臺終端電腦所連接的交換機的編號。  輸出一個整數,表示消息傳遞最多需要的步數。

 

問題分析:這是一個樹的問題,求樹的直徑,即在樹中找出兩個結點,使得這兩個結點間的距離最長,這個最長距離稱為直徑。一般可以用兩次DFS或BFS來實現,在樹上任意選取1個結點s,先用DFS或BFS找到距離s距離最遠的結點start,然后再從結點start開始,再次用DFS或BFS找到距離s距離最遠的結點,得到結果。

程序說明:樹用鄰接結點來存儲,使用STL的向量數組vector<int> tree[]來表示,tree[i]中的存儲從結點i能夠到達的各個結點。其他說明參見源程序。

用整數表示結點,結點號是不允許重復的。終端電腦的變化從n+1開始,依次類推。

參考鏈接:HDU4607 Park Visit(解法二)。

提交后得100分的C++語言程序如下:

/* CCF201503-4 網絡延時 */#include <iostream>#include <vector>#include <cstring>using namespace std;// 深度優先搜索:計算結點now到各個結點的距離,結果放入數組d[]中void dfs(int now, int last, int d[], vector<int> tree[]){    int u, size;    size = tree[now].size();    for(int i=0; i<size; i++)        if ((u = tree[now][i]) != last) {            d[u] = d[now] + 1;            dfs(u, now, d, tree);        }}int main(){    int n, m, t;    // 輸入數據,構建樹(鄰接圖)    cin >> n >> m;    vector<int> tree[n+m+2];    int dist[n+m+2];    for(int i=2; i<=n; i++) {        cin >> t;        tree[i].push_back(t);        tree[t].push_back(i);    }    for(int i=1; i<=m; i++) {        cin >> t;        tree[n+i].push_back(t);        tree[t].push_back(n+i);    }    // 求結點1到各個結點的距離:距離放在數組dist[]中,dist[i]中存放結點1到結點i的距離    memset(dist, 0, sizeof(dist));    dfs(1, 0, dist, tree);    // 找出距離結點1最遠的結點start    int start = 0;    dist[start] = 0;    for(int i=1; i<n+m+2; i++)        if(dist[i] > dist[start])            start = i;    // 求start結點到各個結點的距離:距離放在數組dist[]中,dist[i]中存放結點start到結點i的距離    memset(dist, 0, sizeof(dist));    dfs(start, 0, dist, tree);    // 找出距離結點start最遠的結點target    int target = 0;    for (int i=1; i<n+m+2; i++)        if(dist[i] > dist[target])            target = i;    // 輸出結果    cout << dist[target] << endl;    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜影视一区二区 | 一级做人爱c黑人影片 | 日本中文高清 | 免费黄色在线电影 | 欧美日韩大片在线观看 | 国产精品久久久久久久久久了 | 一区二区久久 | 国产精品剧情一区二区三区 | 欧美色另类 | 国产免费一区二区三区视频 | av懂色| 亚洲精品久久久久久久久久 | 欧美 亚洲 激情 | 国产精品久久久久久久久久三级 | 91嫩草丨国产丨精品入口 | 在线观看网址av | 羞羞的网址 | 欧美黑人伦理 | 九九热播视频 | 国产精选91 | 亚洲婷婷日日综合婷婷噜噜噜 | 亚洲人成在线播放网站 | 免费看欧美一级特黄a大片 久久免费视频一区二区三区 | 看一级大毛片 | 日本欧美一区二区三区在线播 | 久久色播 | 日本免费一区二区三区四区 | 国产精品久久久久久婷婷天堂 | 黄视频免费在线 | 日韩黄色一级视频 | 55夜色66夜色国产精品视频 | 一区二区三区日韩在线观看 | hd极品free性xxx护士人 | 天天色综合6| 亚洲射吧| 欧日一级片| 韩国一级免费视频 | 怦然心动50免费完整版 | 久久免费视频一区二区三区 | 久久精品av| 国产精品一区二区三区在线播放 |