zoukankan      html  css  js  c++  java
  • 【POJ 1062】昂贵的聘礼(最短路)

    Dijkstra最短路,每次限制一个等级差,再更新答案。

    #include <cstdio>
    #define N 105
    #define INF 1e9
    int m, n;
    int p[N], l[N], x, t, v, g[N][N];
    int w, minc, d[N], u[N], ans;
    void Dijkstra(int q)
    {
        for(int i = 1; i <= n; i++){
            d[i] = g[1][i];
            if(!d[i])d[i]=INF;
            u[i]=0;
        }
        u[1] = 1;
        for(int i = 2; i <= n; i++)
        {
            minc = 1e9;
            w = 0;
            for(int j = 2; j <= n; j++)
                if(!u[j] && minc >= d[j] && l[j] >= q && l[j] <= q + m)
                {
                    minc = d[j];
                    w = j;
                }
            if(!w) break;
            u[w] = 1;
            for(int j = 2; j <= n; j++)
                if(!u[j] && g[w][j] && d[j] > d[w] + g[w][j] && l[j] >= q && l[j] <= q + m)
                    d[j] = d[w] + g[w][j];
        }
        for(int i = 2; i <= n; i++)
            if(d[i] + p[i] < ans &&l[i] >= q && l[i] <= q + m)ans = d[i] + p[i];
     
    }
    int main()
    {
        scanf("%d%d", &m, &n);
        for(int i = 1; i <= n; i++)
        {
            scanf("%d%d%d", &p[i], &l[i], &x);
            for(int j = 1; j <= x; j++)
            {
                scanf("%d%d", &t, &v);
                g[i][t] = v;
            }
        }
        ans = p[1];
        for(int i = l[1] - m; i <= l[1] ; i++)
            Dijkstra(i);
        printf("%d
    ",ans);
        return 0;
    }
      
  • 相关阅读:
    set命令_Linux
    AngularJS的date 过滤器
    JMeter环境介绍
    JMeter测试计划要素
    HTTP协议的压缩及URL Encode
    fiddler配置及使用教程
    Slenium常用方法
    Selenium八大定位
    CSS实现上下左右垂直居中
    SASS用法笔记
  • 原文地址:https://www.cnblogs.com/flipped/p/5646030.html
Copyright © 2011-2022 走看看