POJ1125 Stockbroker Grapevine -FLOYD练习题
题目大意是:有N个人,相互之间可以传递信息,但是A传给B与B传给A的时间是不一样的,一个人同时可以向多个人传递信息,时间不一样,问你把消息传给谁?可以在最短时间让消息传递给所有人。
典型的FLOYD求最短路,最后找到所有人距离最大之最小那一个人,输出答案。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int maxn=110,maxint=1000000000;
int d[maxn][maxn];
int main(){
int i,j,k,m,n;
int x,y;
while(1){
scanf("%d",&n);
if(!n)break;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
d[i][j]=maxint;
for(i=1;i<=n;i++){
scanf("%d",&m);
for(j=1;j<=m;j++){
scanf("%d%d",&x,&y);
d[i][x]=y;
}
}
for(i=1;i<=n;i++)d[i][i]=0;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(d[i][j]>d[i][k]+d[k][j])
d[i][j]=d[i][k]+d[k][j];
int mins=maxint,maxs;
for(i=1;i<=n;i++){
maxs=0;
for(j=1;j<=n;j++)
if(d[i][j]>maxs)
maxs=d[i][j];
if(maxs<mins){
mins=maxs;
k=i;
}
}
printf("%d %d\n",k,mins);
}
return 0;
}

浙公网安备 33010602011771号