Cod sursa(job #2033945)

Utilizator calinfloreaCalin Florea calinflorea Data 7 octombrie 2017 12:05:09
Problema Algoritmul Bellman-Ford Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
#define inf 1000000000
using namespace std;

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

vector<pair<int,int> >L[50006];
int viz[50006], drum[50006];
priority_queue <pair<int, int> >q;
int n, m;

void Citire()
{
    int i, x, y, z;

    fin >> n >> m;

    for(i = 1; i <= m; i++)
    {
        fin >> x >> y >> z;

        L[x].push_back({y,z});
    }

    for(i = 2; i <= n; i++)
        drum[i] = inf;
}

void Dijkstra()
{
    int i, o, p, j;
    q.push({0, 1});

    while(!q.empty())
    {
        i = q.top().second;
        q.pop();
        if(!viz[i])
        {
            viz[i] = 1;
            for(j = 0; j < L[i].size(); j++)
            {
                p = L[i][j].second;
                o = L[i][j].first;
                if(drum[o] > drum[i] + p)
                {
                    drum[o] = drum[i] + p;
                    q.push({-drum[o], o});
                }
            }
        }
    }

    for(i = 2; i <= n; i++)
        if(drum[i] == inf)
            fout << "0 ";
        else fout << drum[i] << " ";

    fout << "\n";
}
int main()
{
    Citire();
    Dijkstra();
    return 0;
}