Cod sursa(job #2032158)

Utilizator FredyLup Lucia Fredy Data 4 octombrie 2017 17:23:01
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

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

#define lim 50010
#define inf 2e9
int n,m,rez[lim],viz[lim];
struct nod{int y,c;};
vector <nod> G[lim];
priority_queue <pair<int,int>> q;

int main()
{
    int a,c,b;
    fin>>n>>m;
    for (int i=1; i<=m; i++)
    {
        fin>>a>>b>>c;
        G[a].push_back({b,c});
    }

    for (int i=1; i<=n; i++)    rez[i]=inf;

    q.push({0,1});
    rez[1]=0;
    while (!q.empty())
    {
        pair <int, int> top=q.top();
        q.pop();
        if (viz[top.second])    continue;
        viz[top.second]=1;
        for (auto it:G[top.second])
            if (rez[it.y] > rez[top.second] + it.c)
            {
                rez[it.y] = rez[top.second] + it.c;
                q.push(make_pair(-rez[it.y],it.y));
            }
    }

    for (int i=2; i<=n; i++)
    {
        if (rez[i]==inf)    rez[i]=0;
        fout<<rez[i]<<' ';
    }


    fin.close();
    fout.close();
    return 0;
}