• POJ 1797 Heavy Transportation(dijkstra )


    题意:从1 到n 选择一条载重最大的路 并求出最大值

    思路:

    要得出最大的载重量 我们就要求出每条路线能够负重的最小值

    可以通过 dijkstra算法来求出

    假设现在在x 点 在这之前的最大载重量为 d[x] 现在要通过路线 w[x][y] 到达y

    我们就要将 d[x]和w[x][y] 进行比较 分类讨论得到 d[y]

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #define mem(a,b) memset(a,b,sizeof(a))
    #define ll __int64
    #define MAXN 1000
    #define INF 0x7ffffff
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    using namespace std;
    int w[1200][1200];
    int d[1200];
    int v[1200];
    int main()
    {
        int t,n,m,cas=1;
        int i,j;
        int a,b,c;
    
        cin>>t;
        while(t--)
        {
            printf("Scenario #%d:
    ",cas++);
            cin>>n>>m;
            mem(w,0);
            mem(v,0);
            while(m--)
            {
                scanf("%d%d%d",&a,&b,&c);
                w[a][b]=w[b][a]=c;
            }
            for(int i=1;i<=n;i++)
                        d[i]=(i==1?INF:0);
            for(i=1;i<=n;i++)
            {
                int x,maxx=0;
                for(int y=1;y<=n;y++)
                    if(!v[y]&&d[y]>=maxx) maxx=d[x=y];
                v[x]=1;
                for(int y=1;y<=n;y++)
                {
                    if(d[x]>=w[x][y]&&w[x][y]>d[y])
                    {
                        d[y]=w[x][y];
                    }
                    else if(d[x]<w[x][y]&&d[x]>d[y])
                    {
                        d[y]=d[x];
                    }
                }
            }
            cout<<d[n]<<endl<<endl;
    
        }
        return 0;
    }
    

      

  • 相关阅读:
    HTML DOM 事件
    js实现键盘数字输入
    js实现键盘数字输入
    onbeforeunload事件兼容性操作
    onbeforeunload事件兼容性操作
    window.event对象详尽解析
    git简单使用教程
    PHP中奖概率写法
    PHP替代session的方法
    nginx实现负载均衡
  • 原文地址:https://www.cnblogs.com/sola1994/p/3920922.html
Copyright © 2020-2023  润新知