Cod sursa(job #2269742)

Utilizator TavinciStefanescu Octavian Tavinci Data 26 octombrie 2018 15:16:25
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define lim 50005
#define INF 2000000000
using namespace std;

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

vector <pair<int,int> >G[lim];
priority_queue <pair<int,int> >q;
int n, m, x, y, z;
int cost[lim], viz[lim];
void dijkstra(void)
{
    int nod, newnod, newcost;
    for(nod=2; nod<=n; nod++)
        cost[nod]=INF;
    q.push({0, 1});
    cost[nod]=0;
    while(!q.empty())
    {
        nod=q.top().second;
        q.pop();
        if(viz[nod])
            continue;
        viz[nod]=1;
        for(int i=0; i<G[nod].size(); i++)
        {
            newnod=G[nod][i].second;
            newcost=G[nod][i].first;
            if(cost[newnod]>cost[nod]+newcost)
            {
                cost[newnod]=cost[nod]+newcost;
                q.push({-cost[newnod], newnod});
            }
        }
    }
}
int main()
{
    fin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        fin>>x>>y>>z;
        G[x].push_back({z,y});
    }
    dijkstra();
    for(int i=2; i<=n; i++)
        if(cost[i]==INF)
            fout<<0<<" ";
        else
            fout<<cost[i]<<" ";
    return 0;
}