zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    SpringBoot整合flyway
    JavaFTP递归查询指定目录下的所有目录和文件
    初识网络设备
    Session
    Cookie
    文件下载
    PHP文件上传
    数据库操作函数笔记
    Apache #Tomcat CVE-2020-9484
    红方人员实战手册
  • 原文地址:https://www.cnblogs.com/sola1994/p/3920922.html
Copyright © 2011-2022 走看看