Cod sursa(job #1997690)

Utilizator vladm98Munteanu Vlad vladm98 Data 5 iulie 2017 00:40:30
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;
vector <pair <int, int>> graf[50005];
deque <int> solve;
int distanta[50005];
int vizitari[50005];
int viz[500005];
int main()
{
    ifstream fin ("bellmanford.in");
    ofstream fout ("bellmanford.out");
    int n, m;
    fin >> n >> m;
    for (int i = 1; i<=m; ++i)
    {
        int x, y, cost;
        fin >> x >> y >> cost;
        graf[x].push_back ({y, cost});
        //graf[y].push_back ({x, cost});
    }
    vizitari[1] = 1;
    for (int i = 2; i<=n; ++i)
        distanta[i] = 1<<30;
    solve.push_back(1);
    viz[1] = 1;
    while (solve.empty() == 0)
    {
        int nod = solve.front();
        if (vizitari[nod]>n)
        {
            fout << "Ciclu negativ!";
            return 0;
        }
        viz[nod] = 0;
        solve.pop_front();
        for (auto x:graf[nod])
        {
            if (distanta[x.first] > distanta[nod]+x.second)
            {
                vizitari[x.first] = vizitari[nod] + 1;
                distanta[x.first] = distanta[nod]+x.second;
                if (viz[x.first] == 0)
                {
                    solve.push_back(x.first);
                    viz[x.first] = 1;
                }
            }
        }
    }
    for (int i = 2; i<=n; ++i)
        fout << distanta[i] << " ";
    return 0;
}