Cod sursa(job #2558561)

Utilizator CarlaDianaCarla Diana CarlaDiana Data 26 februarie 2020 17:27:19
Problema Algoritmul Bellman-Ford Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <vector>
#include <queue>
#define inf 1000000007
using namespace std;
ifstream fin ("bellmanford.in");
ofstream fout ("bellmanford.out");
vector <pair<int,pair<int,int> > >v;
priority_queue < pair<int,int>,vector< pair<int,int> >,greater< pair<int,int> > >pq;
pair<int,int>t;
int n,m,a,b,c,d[100];
int main()
{
    fin>>n>>m;
    for(;m;m--)
    {
        fin>>a>>b>>c;
        v.push_back(make_pair(c,make_pair(a,b)));
        ///v.push_back(make_pair(c,make_pair(b,a)));
        if(b==1)
            pq.push(make_pair(c,a));
    }
    for(int i=2;i<=n;i++) d[i]=inf;
    d[1]=0;

    for(int i=1;i<n;i++)
    {
        for(auto it:v)
        {
            if(d[it.second.first]+it.first<d[it.second.second])
                d[it.second.second]=d[it.second.first]+it.first;
        }
    }
    bool ok=1;
    while(!pq.empty()&&ok)
    {
        t=pq.top();
        pq.pop();
        if(d[t.second]+t.first<0)
        {
            ok=0;
            fout<<"Ciclu negativ!";
        }
    }
    if(ok)
    {
        for(int i=2;i<=n;i++)
            fout<<d[i]<<" ";
    }

    return 0;
}