Cod sursa(job #1997330)

Utilizator ButmalaiDanButmalai Dan ButmalaiDan Data 3 iulie 2017 22:25:59
Problema Algoritmul Bellman-Ford Scor 85
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<bits/stdc++.h>
using namespace std;
int n, m, x, y, c;
vector< pair<int,int> > a[250250];
int rez[600000], b[250250];
set<int> s;
int main()
{
    ifstream cin("bellmanford.in");
    ofstream cout("bellmanford.out");
    cin >> n >> m;
    for (int i = 0; i < m; i++)
    {
        cin >> x >> y >> c;
        a[x].push_back(make_pair(y,c));
    }
    c = 1<<30;
    for (int i = 0; i <= n; i++) rez[i] = c;
    rez[1] = 0;
    s.insert(1);
    while(!s.empty())
    {   
        set<int>::iterator it1 = s.begin();
        int f = *it1;
        s.erase(s.begin());
        b[f]++;
        if(b[f] >= n)return cout << "Ciclu negativ!",0;
        for (vector< pair<int,int> >::iterator it = a[f].begin(); it != a[f].end(); it++)
        {   
            if (rez[f] + it->second < rez[it->first])
            {
                rez[it->first] = rez[f] + it->second;
                s.insert(it->first);
            }
        }
    }
    for (int i = 2; i <= n; i++) cout << (rez[i] == 1 <<30 ? 0:rez[i]) << " ";
}