POJ 1125 Stockbroker Grapevine

来源:互联网 发布:数据分析师工资怎么样 编辑:程序博客网 时间:2024/06/07 00:35

题意:给你n个股票经纪人,要你再找出联系所有人的最短时间,有则输出,无则输出一个字符串。

接下来是n组数据,每组数据开头表示第i个经纪人有m个联系人,接下来是m对数据  第一个表示 第几个联系人  第二个数则是联系到他所需要的时间

思路:这个题目主要的是理解题目的意思,理解之后就非常简单了,只要先求出每2个点的最短距离,然后再求出以第i个点为顶点到达第j个点所需要的最长距离,即可把所有的人联系一遍。因为我们求出每2个点的最短距离,所以可以用floyd算法了,这个算法是最容易理解的!

所以AC代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define inf 100int d[120][120];int main(){    int i,j,n,k;    while(scanf("%d",&n)!=EOF)    {        if(n==0)break;        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)            {                d[i][j]=inf;            }        for(i=1;i<=n;i++)        {            int u;            scanf("%d",&u);            for(j=1;j<=u;j++)            {                int v,w;                scanf("%d %d",&v,&w);                d[i][v]=w;            }        }        for(i=1;i<=n;i++)       //求出每2个点的最短距离            for(j=1;j<=n;j++)                for(k=1;k<=n;k++)                {                    if(j!=k&&d[j][k]>d[j][i]+d[i][k])                        d[j][k]=d[j][i]+d[i][k];                }        int temp,maxx,minn=inf;        for(i=1;i<=n;i++)//每次以i为图的顶点        {            maxx=0;            for(j=1;j<=n;j++)   //找出以i为顶点的最大距离点                if(i!=j&&maxx<d[i][j])                    maxx=d[i][j];            if(maxx<minn)       //替换            {                minn=maxx;                temp=i;            }        }        if(minn<inf)            printf("%d %d\n",temp,minn);        else            printf("disjoint\n");    }    return 0;}


1 0
原创粉丝点击