【思路】:根据给出的每个经纪人以及传播时间可以构建出一张图,每对有联系的人之间有一条边,边的权重为传播时间,然后在这张图上求最小生成树即可。
【代码】:
#include<stdio.h>
#include<string>
using namespace std;
int map[102][102];
int temp[102];
int n;
void floyd()
{
memset(temp,-1,sizeof(temp));
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(temp[i]<map[i][j])
temp[i]=map[i][j];
int m=1<<30;
for(i=1;i<=n;i++)
if(m>temp[i])
{
m=temp[i];
j=i;
}
printf("%d %d\n",j,m);
}
int main()
{
int t,d,m,i;
while(scanf("%d",&n)&&n)
{
memset(map,10000,sizeof(map));
for(i=1;i<=n;i++)
map[i][i]=0;
for(i=1;i<=n;i++)
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&d,&m);
map[i][d]=m;
}
}
floyd();
}
return 0;
}