POJ 1125 Stockbroker Grapevine

来源:互联网 发布:linux tar 压缩文件夹 编辑:程序博客网 时间:2024/06/09 21:30

题目链接:点击打开链接

题目大意:一张有向图,100个点,从哪个点开始出发,到达其他点的最大距离最小。

方法就是floyd处理出两点间距离,然后再枚举出答案。

#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;#define INF 0x3f3f3f3fint dis[105][105];int main(){    int n,x,v,t,ans,tmp,p;    while(scanf("%d",&n),n){            memset(dis,INF,sizeof(dis));            for(int i = 1;i <= n;i++){                dis[i][i] = 0;            }        for(int i = 1;i <= n; i++){            cin>>x;            for(int j = 0; j < x; j++){               cin>>v>>t;               dis[i][v] = t;            }        }        for(int k = 1;k <= n;k++){            for(int i = 1;i <= n;i++){                for(int j = 1;j <= n;j++ ){                    if(dis[i][j] > dis[i][k] + dis[k][j]) dis[i][j] = dis[i][k] + dis[k][j];                }            }        }        ans = INF + 1;        for(int i = 1;i <= n;i++){            tmp = 0;            for(int j = 1; j <= n;j++) tmp = max(tmp,dis[i][j]);            if(ans > tmp){                ans = tmp;                p = i;            }        }        printf("%d %d\n",p,ans);    }    return 0;}


0 0
原创粉丝点击