试题编号: | 201503-4 |
试题名称: | 网络延时 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述
给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机、交换机与电脑之间使用网络连接。交换机按层级设置,编号为1的交换机为根交换机,层级为1。其他的交换机都连接到一台比自己上一层的交换机上,其层级为对应交换机的层级加1。所有的终端电脑都直接连接到交换机上。
输入格式
输入的第一行包含两个整数n, m,分别表示交换机的台数和终端电脑的台数。
输出格式
输出一个整数,表示消息传递最多需要的步数。
样例输入
4 2
样例输出
4
样例说明
样例的网络连接模式如下,其中圆圈表示交换机,方框表示电脑:
样例输入
4 4
样例输出
4
样例说明
样例的网络连接模式如下:
评测用例规模与约定
前30%的评测用例满足:n ≤ 5, m ≤ 5。 |
#include<bits/stdc++.h>
using namespace std;
vector<int>tree[20005];//存储整棵树
int n,m,a,ansV=-1,ansLevel=0;//ansV表示距离最远的结点编号,ansLevel表示最远距离
bool visit[20005];//标记每个节点是否已被访问
void DFS(int v,int level){//深度优先遍历
visit[v]=true;
if(level>ansLevel){
ansLevel=level;
ansV=v;
}
for(int i=0;i<tree[v].size();i++)
{
int to=tree[v][i];
if(!visit[to])
{
DFS(to,level+1);
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=2;i<=n+m;++i){
scanf("%d",&a);
tree[a].push_back(i);
tree[i].push_back(a);//将树的边存储为无向边
}
DFS(1,0);//第一次深度优先遍历
memset(visit,0,sizeof(visit));
DFS(ansV,0);//二次遍历
printf("%d",ansLevel);
return 0;
}