题意:
每个股票经纪人与其他人有着联系时间,求与其他人联系的时间(最长联系的时间)最短的那个人及时间(最长联系时间)
题解:
如题,可以构造出有向图,找出所有节点对的最短路径,Floyd算法
#include <stdio.h>
#include <iostream>
#include <cstring>
#define max(a,b) a>b?a:b
using namespace std;
const int inf = 0x3f3f3f3f;
int ma[110][110];
int main(){
int k;
while(~scanf("%d",&k) && k){
memset(ma,inf,sizeof(ma));//初始INF
for(int i=1;i<=k;i++){
int n;
cin>>n;
while(n--){
int b,weigh;
cin>>b>>weigh;
ma[i][b]=weigh;
}
}
for(int q=1;q<=k;q++){//Floyd算法
for(int i=1;i<=k;i++){
for(int j=1;j<=k;j++){
ma[i][j]=min(ma[i][q]+ma[q][j],ma[i][j]);
}
}
}
int tmp1,tmp3=inf,tmp2=0;
for(int i=1;i<=k;i++){
tmp2=0;
for(int j=1;j<=k;j++){//找每一行最大的即为时间
if(i!=j)
{
if(ma[i][j]>tmp2){
tmp2=ma[i][j];
}
}
}
if(tmp3>tmp2){//最短的时间即为最快的那个人
tmp3=tmp2;
tmp1=i;
}
}
printf("%d %d\n",tmp1,tmp3);
}
return 0;
}