zoukankan      html  css  js  c++  java
  • HDU-3790 最短路最小花费

    判断路径相等时的情况

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    using namespace std;
    
    #define pf printf
    #define sf scanf
    #define mp make_pair
    #define INF 0x3f3f3f3f
    
    const int MAXN = 1000 + 5;
    
    int n,m;
    
    struct node
    {
        int d,fee;
    }g[MAXN][MAXN];
    
    int dis[MAXN],f[MAXN],vis[MAXN];
    
    
    void dijkstra(int v)
    {
        int i,j,mind,minf,dir;
        for(i=1;i<=n;i++)
        {
            dis[i] = f[i] = INF;
            vis[i] = 0;
        }
        dis[v] = f[v] = 0;
        vis[v] = 1;
        for(i=1;i<=n;i++)
        {
            mind = minf = INF;
            for(j=1;j<=n;j++)
            {
                if(!vis[j] && (dis[j]<mind || (dis[j]==mind && f[j]<minf)))
                {
                    mind = dis[j];
                    minf = f[j];
                    dir = j;
                }
            }
            vis[dir] = 1;
            for(j=1;j<=n;j++)
            {
                if(!vis[j] && g[dir][j].d<INF && (dis[j] > (dis[dir]+g[dir][j].d) || (dis[j] == (dis[dir]+g[dir][j].d) && f[j]>f[dir]+g[dir][j].fee)))
                {
                    dis[j] = dis[dir]+g[dir][j].d;
                    f[j]=f[dir]+g[dir][j].fee;
                }
            }
        }
    
    }
    
    
    int main()
    {
        int i,j;
        int a,b,d,fee,st,ed;
        while(sf("%d %d",&n,&m)==2,m+n)
        {
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    g[i][j].d = g[i][j].fee = (i==j ? 0:INF);
                }
            }
            for(i=0;i<m;i++)
            {
                sf("%d%d%d%d",&a,&b,&d,&fee);
                if(d < g[a][b].d)
                {
                    g[a][b].d = g[b][a].d = d;
                    g[a][b].fee = g[b][a].fee = fee;
                }
                else if(d == g[a][b].d)
                    g[a][b].fee = g[b][a].fee = min(g[a][b].fee,fee);
            }
            sf("%d%d",&st,&ed);
            dijkstra(st);
            pf("%d %d
    ",dis[ed],f[ed]);
        }
        return 0;
  • 相关阅读:
    TableViewCell bug
    iOS系统框架概述
    Cocoapods的安装与使用
    ios开发学习路径
    django第七天总结
    django第六天上课总结
    django第四天
    django第四天上课总结
    django第三天 小记
    django第三天
  • 原文地址:https://www.cnblogs.com/qlky/p/5467053.html
Copyright © 2011-2022 走看看