hdu1595find the longest of shortest

#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1005;
int n,m;
int dis[maxn],vis[maxn],pre[maxn],mp[maxn][maxn];
int dijkstra(int flag,int st,int en)
{
    for(int i=1;i<=n;i++)
    {dis[i]=mp[i][st];
     vis[i]=0;
     if(flag)pre[i]=st;}
     pre[st]=-1;
     dis[st]=0;
     vis[st]=1;
     while(1)
     {int minn=inf,pos;
     for(int i=1;i<=n;i++)
     {
         if(!vis[i]&&dis[i]<minn)
            minn=dis[pos=i];
     }
     if(minn==inf)break;
     vis[pos]=1;
     for(int i=1;i<=n;i++)
        if(!vis[i]&&dis[i]>dis[pos]+mp[pos][i])
        {dis[i]=dis[pos]+mp[pos][i];
        if(flag)pre[i]=pos;}
     }
     return dis[en];
}
int main()
{
    while(cin>>n>>m)
    {
        memset(mp,0x3f,sizeof(mp));
        while(m--)
        {
            int u,v,val;
            cin>>u>>v>>val;
            if(val<mp[u][v])
            mp[u][v]=mp[v][u]=val;
        }
        dijkstra(1,1,n);
        int maxx=-107;
        for(int i=n;i!=1;i=pre[i])
        {
            int temp=mp[i][pre[i]];
            mp[i][pre[i]]=mp[pre[i]][i]=inf;
            maxx=max(dijkstra(0,1,n),maxx);
            mp[i][pre[i]]=mp[pre[i]][i]=temp;
        }
        cout<<maxx<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43331783/article/details/88078704