POJ:1125 Stockbroker Grapevine

题目链接

题意:

每个股票经纪人与其他人有着联系时间,求与其他人联系的时间(最长联系的时间)最短的那个人及时间(最长联系时间)

题解:

如题,可以构造出有向图,找出所有节点对的最短路径,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;
}

猜你喜欢

转载自blog.csdn.net/wuzhenzi5193/article/details/81589856
今日推荐