Cod sursa(job #2505030)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 6 decembrie 2019 03:44:57
Problema Algoritmul Bellman-Ford Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <bits/stdc++.h>

#define in_file "bellmanford.in"
#define out_file "bellmanford.out"
#define NMAX 50005
#define INF 1000003

using namespace std;

vector<pair<int,int>> G[NMAX];
vector<int> usedtimes;
vector<int> dist;
queue<int> q;

void printVec(vector<int> v){
    for(auto e : v){
        fprintf(stdout, "%d, ", e);
    }
}

void bf(int n, int s){
    dist[n]=0;
    usedtimes[n]++;
    q.push(n);
    while(!q.empty()){
        int curNode = q.front();
        q.pop();
        for(auto n:G[curNode]){
            if(dist[n.first]>=dist[curNode]+n.second){
                dist[n.first] = dist[curNode]+n.second;
                usedtimes[curNode]++;
                if(usedtimes[curNode]>s){
                    cout<<"Ciclu negativ!";
                    return;
                }
                q.push(n.first);
            }
        }
    }
    for(int i=2; i<=s;i++){
        cout<<dist[i]<<" ";
    }
}

int main()
{
    freopen(in_file, "r", stdin);
    freopen(out_file, "w", stdout);
    int n,m;
    int n1, n2, cost;
    cin>>n>>m;
    dist=vector<int>(n+1, INF);
    usedtimes=vector<int>(n+1, 0);
    while(m--){
        cin>>n1>>n2>>cost;
        G[n1].push_back({n2, cost});
    }
    bf(1, n);
    return 0;
}