Heavy Transportation

N个点,M条边,每条边有权值。求一条1号点到N号点的路径,要求使得路径中的边权最小值最大。

Input
多组输入,第一行给一个T。
每一组第一行给两个数n和m。(1 <= n <= 1000)
接下来m行,每行三个数u,v,w代表路径的两个端点与边权。
(1 <= u,v <= n , 0< w <= 1e6)
保证两点间只有一条边,该图为无向图。

Output
第i组数据先输出 “Scenario #i:”
然后输出该路径上的最小边权。
保证有解

Sample Input
1
3 3
1 2 3
1 3 4
2 3 5

Sample Output
Scenario #1:
4

思路:找最短路径,并且最短路径中边权最小值最大,这是一道套最短路径算法的模板题,有些改动。直接看代码吧:

注意:输出的时候要多次换行,提交的时候一直卡在输出格式错误。

在这里插入代码片
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int n,m;
int e[1005][1005];
int dist[1005];
int vst[1005];
void bigboom()
{
    for(int i=1; i<=n; i++)
    {
        dist[i]=e[i][1];
    }
    vst[1]=1;
    for(int i=1; i<n; i++)
    {
        int g=0;
        int h;
        for(int j=1; j<=n; j++)
        {
            if(vst[j]==0&&dist[j]>g)
            {
                g=dist[j];
                h=j;
            }
        }
        vst[h]=1;
        if(h==n)
        {
            break;
        }
        for(int k=1; k<=n; k++)
        {
            if(vst[k]==0&&dist[k]<min(dist[h],e[k][h]))
            {
                dist[k]=min(dist[h],e[k][h]);
            }
        }
    }
    printf("%d\n\n",dist[n]);//坑点,需要多次换行
}
int main()
{
    int T,t=0;
    scanf("%d",&T);
    while(T--)
    {
        t++;
        scanf("%d%d",&n,&m);
        memset(e,0,sizeof(e));
        memset(vst,0,sizeof(vst));
        memset(dist,0,sizeof(dist));
        int u,v,w;
        while(m--)
        {
            scanf("%d%d%d",&u,&v,&w);
            if(e[u][v]<w)
            {
                e[u][v]=e[v][u]=w;
            }
        }
        printf("Scenario #%d:\n",t);
        bigboom();
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值