Cod sursa(job #1988940)

Utilizator popabogdanPopa Bogdan Ioan popabogdan Data 5 iunie 2017 12:34:36
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

#define Nmax 50005
#define inf 1000000000

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

int N, M;
vector < pair <int, int> > G[Nmax];
int i, j, c;
int D[Nmax];
priority_queue < pair <int, int>, vector < pair <int, int> >, greater < pair <int, int> > > Q;

int main()
{
    fin >> N >> M;
    while(M--)
    {
        fin >> i >> j >> c;
        G[i].push_back(make_pair(c, j));
    }
    for(i = 1; i <= N; i++)
        D[i] = inf;
    Q.push(make_pair(0, 1));
    while(!Q.empty())
    {
        int node = Q.top().second;
        int cost = Q.top().first;
        Q.pop();
        if(D[node] > cost)
        {
            D[node] = cost;
            for(auto it : G[node])
                if(D[it.second] > D[node] + it.first)
                    Q.push(make_pair(D[node] + it.first, it.second));
        }
    }
    for(i = 2; i <= N; i++)
        fout << (D[i] == inf ? 0 : D[i]) << " ";
    fout << "\n";
    return 0;
}