p3615_floyd

来源:互联网 发布:淘宝客服介入电话 编辑:程序博客网 时间:2024/05/21 06:23

求最短距中最大的那个边

把map[i][j]=map[i][k]+map[k][j]改成map[i][j]=max(map[i][k],map[k][j])

因为要求的是最大的那个边


#include<cstdio>
#include<algorithm>
#define INF 1e9
using namespace std;
const int maxn = 300+10;
int n,m,t;
int d[maxn][maxn];
void floyd()
{
    for(int k=1;k<=n;k++)
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
        if(d[i][k]<INF &&d[k][j]<INF)
            d[i][j]=min(d[i][j],max(d[i][k],d[k][j]));
}
int main()
{
    while(scanf("%d%d%d",&n,&m,&t)==3)
    {
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            d[i][j]= i==j?0:INF;
        for(int i=1;i<=m;i++)
        {
            int u,v,height;
            scanf("%d%d%d",&u,&v,&height);
            d[u][v]=height;
        }
        floyd();
        while(t--)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            printf("%d\n",d[u][v]==INF?-1:d[u][v]);
        }
    }
    return 0;
}

0 0
原创粉丝点击