zoukankan      html  css  js  c++  java
  • Poj(1797) Dijkstra对松弛条件的变形

    题目链接:http://poj.org/problem?id=1797

    题意:从路口1运货到路口n,最大的运货重量是多少?题目给出两路口间的最大载重。

    思路:j加到s还是接到K下面,取两者的较大者,而使得载重量较大,而接到k下面,载重量是dis[k]和maps[k][j]的较小者。

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    
    using namespace std;
    
    #define INF 0x3f3f3f3f
    
    int n,m;
    int maps[1005][1005];
    int dis[1005];
    bool vis[1005];
    
    void Dijkstra(int s)
    {
        memset(vis,false,sizeof(vis));
    
        for(int i=1;i<=n;i++)
            dis[i] = maps[s][i];
    
        dis[s] = INF;
        vis[s] = true;
    
        for(int i=1;i<n;i++)
        {
            int k = 0,tmp = 0;
            for(int j=1;j<=n;j++)
            {
                if(vis[j]) continue;
                if(dis[j]>tmp)
                {
                    tmp = dis[j];
                    k = j;
                }
            }
    
            vis[k] = true;
            for(int j=1;j<=n;j++)
            {
                if(vis[j]) continue;
                dis[j] = max(dis[j],min(dis[k],maps[k][j]));
            }
        }
    }
    
    
    int main()
    {
        int cases;
        scanf("%d",&cases);
        for(int k=1;k<=cases;k++)
        {
            scanf("%d%d",&n,&m);
            memset(maps,0,sizeof(maps));
            for(int i=0;i<m;i++)
            {
                int u,v,c;
                scanf("%d%d%d",&u,&v,&c);
                maps[u][v] = maps[v][u] = max(maps[u][v],c);
            }
            Dijkstra(1);
            printf("Scenario #%d:
    %d
    
    ",k,dis[n]);
        }
        return 0;
    }
  • 相关阅读:
    java值类型和引用类型
    0513作业
    随机四位验证码
    1-36随机生成6个不重复的数
    java随机数
    0509作业
    作业0508
    字符集
    eclipse快捷键
    数据类型 转换
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5731451.html
Copyright © 2011-2022 走看看