|
试题编号:
|
201503-4
|
|
试题名称:
|
网络延时
|
|
时间限制:
|
1.0s
|
|
内存限制:
|
256.0MB
|
|
问题描述:
| |
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<limits.h>
#include<algorithm>
#include<memory.h>
#include<string.h>
using namespace std;
int n = 0, m = 0;
const int MaxN = 300;
int dis[MaxN],g[MaxN][MaxN], N;
bool v[MaxN];
void dijkstra(int k)
{
for (int i = 1; i <= N; i++)dis[i] = INT_MAX;
dis[k] = 0;
memset(v, 0, sizeof(v));
for (int i = 0; i <= N; ++i)
{
int mark = -1, mindis = INT_MAX;
for (int j = 1; j <= N; j++)
{
if (!v[j] && dis[j] < mindis){
mindis = dis[j];
mark = j;
}
v[mark] = 1;
for (int j = 1; j <= N; j++)
{
if (!v[j]){
dis[j] = min(dis[j], dis[mark] + g[mark][j]);
}
}
}
}
}
void floyd()
{
for (int k = 1; k <= N; k++){
for (int i = 1; i <= N; i++){
for (int j = 1; j <= N; j++)
g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
}
}
}
int main()
{
int i = 0, j = 0, k = 0, tem = 0;
cin >> n >> m;
N = n + m;
for (i = 1; i <= N; i++)
{
//dijkstra(i);
for (j = 1; j <= N; j++)
g[i][j] = 20002;
}
for (i = 1; i < n; i++)//交换机输入.2-n对应至上层交换机编号,
//分别表示第2、3、……、n台交换机所连接的比自己上一层的交换机的编号。
//第i台交换机所连接的上一层的交换机编号一定比自己的编号小。
{
cin >> tem;
g[tem][i + 1] = g[i + 1][tem] = 1;
}
for (i = 1; i <= m; i++)
{
cin >> tem;
g[n + i][ tem ] =g[tem][n + i] = 1;
}
tem = INT_MIN;
floyd();
for (i = 1; i <= N; i++)
{
//dijkstra(i);
for (j = 1; j <= N; j++)
if (g[i][j] > tem)tem = g[i][j];
}
cout << tem << endl;
return 0;
}
发布评论