zoukankan      html  css  js  c++  java
  • 【Codeforces 20C】 Dijkstra?

    【题目链接】

               点击打开链接

    【算法】

              dijkstra

    【代码】

             

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll INF = 1e15;
    const ll MAXN = 1e5;
    
    ll n,m,u,v,w,i,p,to,cost,x;
    ll dist[MAXN+10],vis[MAXN+10],last[MAXN+10];
    priority_queue< pair<ll,ll> > q;
    vector< pair<ll,ll> > E[MAXN+10];
    vector<ll> path;
    
    template <typename T> inline void read(T &x) {
            ll f = 1; x = 0;
            char c = getchar();
            for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
            for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';
            x *= f;
    }
    template <typename T> inline void write(T x) {
            if (x < 0) { x = -x; putchar('-'); }
            if (x > 9) write(x/10);
            putchar(x%10+'0');    
    }
    template <typename T> inline void writeln(T x) {
            write(x);
            puts("");    
    }
    
    int main() {
        
        read(n); read(m);
        for (i = 1; i <= m; i++) {
                read(u); read(v); read(w);
                E[u].push_back(make_pair(v,w));
                E[v].push_back(make_pair(u,w));
        }
        for (i = 2; i <= n; i++) dist[i] = INF;
        q.push(make_pair(0,1));
        while (!q.empty()) {
                x = q.top().second; q.pop();
                if (vis[x]) continue;    
                vis[x] = 1;
                for (i = 0; i < E[x].size(); i++) {
                        to = E[x][i].first;
                        cost = E[x][i].second;
                        if (dist[x] + cost < dist[to]) {
                                dist[to] = dist[x] + cost;
                                q.push(make_pair(-dist[to],to));
                                last[to] = x;
                        }
                }
        }
        
        if (dist[n] == INF) {
                puts("-1");
                return 0;
        }
        
        p = n;
        while (p) {
                path.push_back(p);
                p = last[p];
        }
        
        reverse(path.begin(),path.end());
        
        for (i = 0; i < path.size(); i++) {
                write(path[i]);
                if (i < path.size() - 1) putchar(' ');    
        }
        
        return 0;
    }
  • 相关阅读:
    marMariaDB & MYSQL flexviews
    tomcat与resin的比较
    nginx 1.4.3能直接升到1.8.1吗
    Docker Compose vs. Dockerfile
    分布式事务 spring 两阶段提交 tcc
    linux下拷贝整个目录
    MySQL :: Fatal error: Can&#039;t change to run as user &#039;mysql&#039;. Please check that the user exists!
    python Drools
    KubeCon CloudNativeCon China 2019
    在mysql中修改表名的sql语句
  • 原文地址:https://www.cnblogs.com/evenbao/p/9196387.html
Copyright © 2011-2022 走看看