Cod sursa(job #2071918)

Utilizator mihai.alphamihai craciun mihai.alpha Data 21 noiembrie 2017 10:12:07
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

const int maxn = 5e4 + 5;

struct at  {
    int fi, se;
    bool operator < (const at &a) const {
        return se > a.se;
    }
};

const int inf = 1e9;

int N, M;
vector <at > v[maxn];
priority_queue <at> pq;
int d[maxn];

inline void dijkstra(int sursa)  {
    pq.push({1, 0});
    for(int i = 1;i <= N;i++)
        d[i] = inf;
    while(!pq.empty())  {
        at nod = pq.top();
        pq.pop();
        if(d[nod.fi] == inf)  {
            d[nod.fi] = nod.se;
            for(auto x : v[nod.fi])  {
                if(d[x.fi] == inf)  {
                    pq.push({x.fi, nod.se + x.se});
                }
            }
        }
    }
}

int main()  {
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    scanf("%d%d", &N, &M);
    for(int i = 1;i <= M;i++)  {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        v[a].push_back({b, c});
    }
    dijkstra(1);
    for(int i = 2;i <= N;i++)
        if(d[i] == inf)
            cout << "0 ";
        else
            cout << d[i] << " ";
    return 0;
}