poj 1125 -- Stockbroker Grapevine (最短路)

题挺长,其实就是求单源最短路中最长的

枚举每个点求单源最短路的最大值,然后取这些值中最小的

#include<iostream>
#include<queue>
using namespace std;
const int MAX=1000000000;
int cnt;
int a[101][101];
int dis[101];
int bellman(int v)
{
    bool isin[101]= {0};
    isin[v]=1;
    for(int i=1; i<=cnt; dis[i++]=MAX);
    dis[v]=0;
    queue<int> q;
    q.push(v);
    while(q.size())
    {
        int t=q.front();
        for(int i=1; i<=cnt; i++)
        {
            if(dis[t]+a[t][i]<dis[i])
            {
                dis[i]=dis[t]+a[t][i];
                if(isin[i]==0)
                {
                    isin[i]=1;
                    q.push(i);
                }
            }
        }
        q.pop();
        isin[t]=0;
    }
    int max=0;
    for(int i=1; i<=cnt; i++)
    {
        if(dis[i]>max)
            max=dis[i];
    }
    return max;
}
int main()
{
    while(cin>>cnt,cnt)
    {
        for(int i=1; i<=cnt; i++)
            for(int j=1; j<=cnt; j++)
                a[i][j]=MAX;
        for(int i=1; i<=cnt; i++)
        {
            int num;
            cin>>num;
            while(num--)
            {
                int n,t;
                cin>>n>>t;
                a[i][n]=t;
            }
        }
        int min=MAX,k=-1;
        for(int i=1; i<=cnt; i++)
        {
            int tmp=bellman(i);
            if(tmp<min)
            {
                min=tmp;
                k=i;
            }
        }
        cout<<k<<" "<<min<<endl;
    }
}


你可能感兴趣的:(poj 1125 -- Stockbroker Grapevine (最短路))