POJ 1125 Stockbroker Grapevine

来源:互联网 发布:cad软件官网 编辑:程序博客网 时间:2024/05/29 07:11

这个题很水,后台数据相当弱,写这个只是记录一下。

再次吐槽一下,那个不联通的情况(输出“disjoint”)甚至都不用输出,输出错了也没事。。

用的Foyld,  0MS;

贴一下代码:

#include <stdio.h>#include <math.h>const int inf=1<<30;const int V=105;int in=1;int map1[V][V];int min(int a, int b){    if(a<=b) return a;    return b;}void flody(int n){    int i,j,k;    for(k=1; k<=n; k++)    {        for(i=1; i<=n; i++)        {            for(j=1; j<=n; j++)            {                if(map1[i][k]!=inf&&map1[k][j]!=inf&&map1[i][j]>map1[i][k]+map1[k][j])                {                    map1[i][j]=map1[i][k]+map1[k][j];                }            }        }    }}int main(){    int n;    while(scanf("%d",&n),n)    {        int i,j,t,a,b,min1,mini,flat,max1;        for(i=0; i<=n; i++)        {            for(j=0; j<=n; j++)            {                map1[i][j]=inf;                if(i==j)                {                     map1[i][j]=0;                }            }        }        for(i=0; i<n; i++)        {            scanf("%d",&t);            for(j=0; j<t; j++)            {                scanf("%d%d",&a,&b);                map1[i+1][a]=b;            }        }        flody(n);        min1=inf;        for(i=1; i<=n; i++)        {            max1=0;            for(j=1;j<=n;j++)            {                if(map1[i][j]>max1)                {                    max1=map1[i][j];                }            }            if(max1<min1)            {                min1=max1;                mini=i;            }        }        if(min1==inf)        {            printf("disjoint\n");        }        else        {            printf("%d %d\n",mini,min1);        }    }    return 0;}