CCF考试——201503-4 网络延时
2018-03-03 16:33
218 查看
概要
问题描述给定一个公司的网络,由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。
思路
这个题粗略一看像一道并查集的题,但仔细琢磨却是一道dfs的题目。首先不要被交换机和电脑搞懵了,就是图的结点,只不过初始化要用两个循环来搞定而已。首先初始化距离数组dist全为0,这个数组记录开始节点到图中所有结点的距离,利用dfs得出结点1到各个结点距离,存放在dist中。之后找到dist数组内最大对应结点start,之后在此运行dfs,得到start到各个结点的距离,找到其中最大就是题目的答案。AC代码
#include <iostream> #include <vector> #include <cstring> using namespace std; vector<int> data[20002]; int isivisited[20002]; int dist[20002]; int n,m; //计算结点start到各个结点的距离,存放在dist数组里 void dfs(int start,int last) { int u; for(int i = 0 ; i < data[start].size() ; i++){ u = data[start][i]; if(u != last){ dist[u] = dist[start]+1; dfs(u,start); } } } int main() { while(cin>>n>>m){ for(int i = 2 ; i <= n ; i++){ int t; cin>>t; data[i].push_back(t); data[t].push_back(i); } for(int i = 1+n ; i <n+m ; i++){ int t; cin>>t; data[t].push_back(i); data[i].push_back(t); } //求结点1到各个顶点的距离 memset(dist,0,sizeof(dist)); dfs(1,0); //找到最远结点start int start = 0; dist[start] = 0; for(int i = 1 ; i < n+m+2 ; i++){ if(dist[i] > dist[start]){ start = i; } } //求结点start到各个顶点的距离 memset(dist,0,sizeof(dist)); dfs(start,0); //找到目标结点 int target = 0; dist[target] = 0; for(int i = 0 ; i < n+m+2 ; i++){ if(dist[i] > dist[target]){ target = i; } } cout<<dist[target]<<endl; } return 0; }
相关文章推荐
- CCF 201503-4 网络延时(树的直径,两次BFS)
- CCF CSP 201503-4 网络延时
- CCF- 201503-4 网络延时(树的直径)
- CCF 201503-4 网络延时
- CCF CSP 201503-4:网络延时
- CCF CSP 201503-4 网络延时 (求树的直径-树形DP)
- CCF 201503-4 网络延时(求树的直径)
- ccf 201503-4 网络延时
- CCF 201503-4 网络延时 (树的直径)
- ccf 201503-4 网络延时 树的直径问题(两次bfs)
- CCF 201503-4 网络延时 (树的直径)
- CCF 201503-4 网络延时
- CCF 201503-4 网络延时
- ccf 201503-4 网络延时(求树的直径)
- 201503-4 网络延时 ccf
- CCF考试——201503-2数字排序
- CCF CSP 网络延时 树的直径
- CCF真题之网络延时
- 网络延时 201503-4
- CCF-网络延时