zoukankan      html  css  js  c++  java
  • ROADS POJ

    ROADS 

    思路:K = 10000,dijkstra复杂度O(nlogn),如果我们把不同点的不同花费拆点,即d[花费][点] = 距离,则被拆为 N*K个点,分成K层,则dijkstra复杂度O(k * (n *logn + m)),复杂度在超时边缘徘徊...

    #include <iostream>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    
    using namespace std;
    
    #define ll long long
    #define pb push_back
    #define fi first
    #define se second
    
    const int N = 110;
    const int INF = 1e9;
    struct node{
        int v, w, c;
    };
    int n, k, m;
    vector<node > E[N];
    int d[10010][N];
    
    void dijkstra(){
        for(int i = 0; i <= 10000; ++i){
            for(int j = 1; j <= 100; ++j){
                d[i][j] = INF;
            }
        }
    
        queue<pair<int ,int > > que;     
        d[0][1] = 0;
        que.push(make_pair(0, 1));
        while(!que.empty()){
            int c = que.front().fi;
            int u = que.front().se;
            que.pop();
    
            for(int i = 0; i < (int)E[u].size(); ++i){
                node e = E[u][i];
                if(c + e.c > k) continue;
                if(d[c + e.c][e.v] > d[c][u] + e.w){
                    d[c + e.c][e.v] = d[c][u] + e.w;
                    que.push(make_pair(c + e.c, e.v));
                }
            }
        }
    }
    
    void solve(){
    
        scanf("%d%d%d", &k, &n, &m);
        int u, v, w, c;
        for(int i = 0; i < m; ++i){
            scanf("%d%d%d%d", &u, &v, &w, &c);
            E[u].pb({v, w, c});
        }
    
        dijkstra();
    
        int ans = INF;
        for(int i = 0; i <= k; ++i){
            ans = min(ans, d[i][n]);
        }
        //printf("ans = ");
        printf("%d
    ", ans == INF ? -1 : ans);
    }
    
    int main(){
        
        solve();    
        //cout << "not error" << endl;
        return 0;
    }
  • 相关阅读:
    C# 字符串转换值类型
    C#判断字符串为空
    c#转义字符
    python各种类型的转换
    mysql创建新用户及新用户不能本地登陆的问题
    数据探索的方法
    使用requests爬取猫眼电影TOP100榜单
    Python中的正则表达式教程
    Anaconda多版本Python管理以及TensorFlow版本的选择安装
    Xshell访问虚拟机内Linux
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/12988595.html
Copyright © 2011-2022 走看看